web-dev-qa-db-fra.com

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

J'initialise un tableau de cette façon:

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

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

92
user502052

Vous pouvez utiliser un littéral de tableau:

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

Vous pouvez également 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 chaînes délimitées par des espaces, vous pouvez utiliser Syntaxe pour cent de chaîne :

array = %w[ 1 2 3 ]

Vous pouvez également passer un bloc à Array.new pour déterminer la valeur de chaque entrée:

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

Enfin, bien qu'il ne produise 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]
176
Phrogz

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']
16
pankajdoharey

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

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

Pour prouver qu'il y a plus que Un Six façons de le faire:

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

Si 1.method (: +) n'a pas été possible, vous pouvez également le faire

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

Bien sûr, ce scénario est excessif, mais si plus_1 était une expression très longue, vous souhaiterez peut-être le placer sur une ligne distincte de celle du tableau.

7
Andrew Grimm

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 des espaces

3
John Douthat

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]

En outre, vous n'avez pas besoin de mettre une virgule entre les éléments (ce qui est nécessaire pour créer 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 le faites:

puts wrong_array

la sortie sera: 

1,
2,
3
=>nil

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

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

2
tg_freelancer

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

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

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

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

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

array = %w(1 2 3)

Il ajoutera les valeurs de tableau 1, 2, 3 au tableau et imprimera la sortie en tant que ["1", "2", "3"]

0
Prabhakar