J'initialise un tableau de cette façon:
array = Array.new
array << '1' << '2' << '3'
Est-il possible de faire cela en une seule étape? Si c'est le cas, comment?
array = Array.new << 1 << 2 << 3
)
1
pour '1'
.
J'initialise un tableau de cette façon:
array = Array.new
array << '1' << '2' << '3'
Est-il possible de faire cela en une seule étape? Si c'est le cas, comment?
array = Array.new << 1 << 2 << 3
)
1
pour '1'
.
Réponses:
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 la syntaxe de chaîne de pourcentage :
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]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(je ne pense pas que cette méthode ait quoi que ce soit à voir avec le constructeur littéral de tableau). Vous pouvez également utiliser le Kernel # Array de niveau supérieur (le nom de la méthode ressemble à un nom de classe)Array(1..5) #=> [1,2,3,4,5]
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']
[1,2,3]
une seule initialisation. En outre, le vôtre est plus de personnages. De plus, vous avez créé un tableau de Fixnums alors que l'OP demandait un tableau de chaînes.
En plus des réponses ci-dessus, vous pouvez également le faire
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Pour prouver qu'il ya plus d' un 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 pouvez également faire
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Bien sûr, c'est exagéré dans ce scénario, mais s'il plus_1
s'agissait d'une expression vraiment longue, vous voudrez peut-être la mettre sur une ligne distincte de la création du tableau.
Tu peux faire
array = ['1', '2', '3']
Comme d'autres l'ont noté, vous pouvez également initialiser un tableau avec la notation% w comme ceci:
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 une virgule 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
la sortie sera:
1,
2,
3
=>nil
ce n'est pas ce que nous voulons ici.
J'espère que cela aidera à clarifier le point!
Pour créer un tel tableau, vous pouvez faire:
array = ['1', '2', '3']
Si vous avez un tableau de chaînes, vous pouvez également l'initialiser comme ceci:
array = %w{1 2 3}
séparez simplement chaque élément avec n'importe quel espace
Vous pouvez simplement le faire avec la %w
notation dans les tableaux ruby.
array = %w(1 2 3)
Il ajoutera les valeurs du tableau 1, 2, 3 au tableau et affichera la sortie comme ["1", "2", "3"]