Comment initialiser un tableau en une seule étape en utilisant Ruby?

Je initialise un tableau de cette façon:

array = Array.new array << '1' << '2' << '3' 

Est-il possible de le faire en une seule étape? Si c’est le cas, comment?

Comme d’autres l’ont noté, vous pouvez utiliser un littéral de tableau:

 array = [ '1', '2', '3' ] 

Vous pouvez également, pour votre exemple, utiliser une plage:

 array = ('1'..'3').to_a # parentheses are required # or array = *('1'..'3') # parentheses not required, but included for clarity 

Pour les tableaux de nombreuses chaînes délimitées par des espaces, la plus simple est cette notation:

 array = %w[ 1 2 3 ] 

En général, vous pouvez transmettre un bloc à Array.new et l’utiliser pour déterminer la valeur de chaque entrée:

 array = Array.new(3){ |i| (i+1).to_s } 

Enfin, même s’il ne produit pas le même tableau de trois chaînes que les autres réponses ci-dessus, notez également que vous pouvez utiliser des énumérateurs dans Ruby 1.8.7+ pour créer des tableaux; par exemple:

 array = 1.step(17,3).to_a #=> [1, 4, 7, 10, 13, 16] 

Bon mot:

 array = [] < < 1 << 2 << 3 #this is for fixnums. 

ou

  a = %w| 1 2 3 4 5 | 

ou

  a = [*'1'..'3'] 

ou

  a = Array.new(3, '1') 

ou

  a = Array[*'1'..'3'] 

Avec les réponses ci-dessus, vous pouvez le faire aussi

  => [*'1'.."5"] #remember * => ["1", "2", "3", "4", "5"] 

Pour prouver qu’il y a plus de six façons de le faire:

 plus_1 = 1.method(:+) Array.new(3, &plus_1) # => [1, 2, 3] 

Si 1.method (: +) n’était pas possible, vous pourriez aussi faire

 plus_1 = Proc.new {|n| n + 1} Array.new(3, &plus_1) # => [1, 2, 3] 

Bien sûr, c’est excessif dans ce scénario, mais si plus_1 était une expression très longue, vous pourriez vouloir la placer sur une ligne distincte de la création du tableau.

Si vous avez un tableau de chaînes, vous pouvez également l’initialiser comme ceci:

array = %w{1 2 3}

il suffit de séparer chaque élément avec n’importe quel espace

Pour créer un tel tableau, vous pouvez faire:

 array = ['1', '2', '3'] 

Tu peux faire

 array = ['1', '2', '3'] 

Comme d’autres l’ont noté, vous pouvez également initialiser un tableau avec la notation% w comme suit:

 array = %w(1 2 3) 

ou

 array = %w[1 2 3] 

Veuillez noter que dans les deux cas, chaque élément est une chaîne plutôt qu’un entier. Donc, si vous voulez un tableau dont les éléments sont des entiers, vous ne devez pas envelopper chaque élément avec des apostrophes:

 array_of_integers = [1, 2, 3] 

De plus, vous n’avez pas besoin de mettre des virgules entre les éléments (ce qui est nécessaire lors de la création d’un tableau sans cette notation% w). Si vous faites cela (ce que j’ai souvent fait par erreur), comme dans:

 wrong_array = %w(1, 2, 3) 

ses éléments seront trois chaînes —- “1”, “2”, “3”. Donc, si vous faites:

 puts wrong_array 

le résultat sera:

 1, 2, 3 =>nil 

ce qui n’est pas ce que nous voulons ici.

J’espère que cela aide à clarifier le point!

Vous pouvez initialiser un tableau en une seule étape en écrivant les éléments dans [] comme ceci:

 array = ['1', '2', '3'] 

Vous pouvez simplement faire cela avec la notation %w dans les tableaux Ruby.

 array = %w(1 2 3) 

Il appenda les valeurs de tableau 1,2,3 au tableau et imprimera la sortie sous la forme ["1", "2", "3"]