Eu inicializo um array desta maneira:
array = Array.new
array << '1' << '2' << '3'
É possível fazer isso em uma etapa? Se sim, como?
array = Array.new << 1 << 2 << 3
)
1
para '1'
.
Eu inicializo um array desta maneira:
array = Array.new
array << '1' << '2' << '3'
É possível fazer isso em uma etapa? Se sim, como?
array = Array.new << 1 << 2 << 3
)
1
para '1'
.
Respostas:
Você pode usar um literal de matriz:
array = [ '1', '2', '3' ]
Você também pode usar um intervalo:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
Para matrizes de strings delimitadas por espaços em branco, você pode usar a sintaxe de string de porcentagem :
array = %w[ 1 2 3 ]
Você também pode passar um bloco para Array.new
determinar qual será o valor de cada entrada:
array = Array.new(3) { |i| (i+1).to_s }
Finalmente, embora não produza o mesmo array de três strings que as outras respostas acima, observe também que você pode usar enumeradores em Ruby 1.8.7+ para criar arrays; por exemplo:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(não acho que esse método tenha algo a ver com o construtor literal de array). Você também pode usar o Kernel # Array de nível superior (o nome do método se parece com um nome de classe)Array(1..5) #=> [1,2,3,4,5]
Oneliner:
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]
fazer uma única inicialização. Além disso, o seu é mais personagens. Além disso, você criou um array de Fixnums enquanto o OP estava perguntando sobre um array de strings.
Junto com as respostas acima, você também pode fazer isso
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Para provar que há mais de um seis maneiras de fazer isso:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
Se 1. método (: +) não fosse possível, você também poderia fazer
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Claro, é um exagero neste cenário, mas se plus_1
for uma expressão muito longa, você pode querer colocá-la em uma linha separada da criação do array.
Você pode fazer
array = ['1', '2', '3']
Como outros notaram, você também pode inicializar uma matriz com a notação% w assim:
array = %w(1 2 3)
ou
array = %w[1 2 3]
Observe que em ambos os casos cada elemento é uma string, em vez de um número inteiro. Portanto, se você deseja uma matriz cujos elementos são inteiros, não deve envolver cada elemento com apóstrofos:
array_of_integers = [1, 2, 3]
Além disso, você não precisa colocar vírgulas entre os elementos (o que é necessário ao criar um array sem esta notação% w). Se você fizer isso (o que eu costumava fazer por engano), como em:
wrong_array = %w(1, 2, 3)
seus elementos serão três strings ---- "1,", "2,", "3". Então, se você:
puts wrong_array
a saída será:
1,
2,
3
=>nil
que não é o que queremos aqui.
Espero que isso ajude a esclarecer o ponto!
Para criar tal array, você pode fazer:
array = ['1', '2', '3']
Se você tem uma matriz de strings, também pode inicializá-la assim:
array = %w{1 2 3}
apenas separe cada elemento com qualquer espaço em branco
Você pode simplesmente fazer isso com %w
notação em matrizes de rubi.
array = %w(1 2 3)
Ele adicionará os valores da matriz 1,2,3 à matriz e imprimirá a saída como ["1", "2", "3"]