Inizializzo un array in questo modo:
array = Array.new
array << '1' << '2' << '3'
È possibile farlo in un solo passaggio? Se é cosi, come?
array = Array.new << 1 << 2 << 3
)
1
in '1'
.
Inizializzo un array in questo modo:
array = Array.new
array << '1' << '2' << '3'
È possibile farlo in un solo passaggio? Se é cosi, come?
array = Array.new << 1 << 2 << 3
)
1
in '1'
.
Risposte:
Puoi usare un array letterale:
array = [ '1', '2', '3' ]
Puoi anche utilizzare un intervallo:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
Per le matrici di stringhe delimitate da spazi, puoi usare la sintassi della stringa percentuale :
array = %w[ 1 2 3 ]
Puoi anche passare un blocco a Array.new
per determinare quale sarà il valore di ciascuna voce:
array = Array.new(3) { |i| (i+1).to_s }
Infine, sebbene non produca lo stesso array di tre stringhe delle altre risposte precedenti, nota anche che puoi usare gli enumeratori in Ruby 1.8.7+ per creare array; per esempio:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(non credo che questo metodo abbia nulla a che fare con il costruttore letterale dell'array). Puoi anche usare il Kernel # Array di primo livello (il nome del metodo sembra un nome di classe)Array(1..5) #=> [1,2,3,4,5]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
o
a = %w| 1 2 3 4 5 |
o
a = [*'1'..'3']
o
a = Array.new(3, '1')
o
a = Array[*'1'..'3']
[1,2,3]
che fa una singola inizializzazione. Inoltre, il tuo è più personaggi. Inoltre, hai creato un array di Fixnum mentre l'OP chiedeva informazioni su un array di stringhe.
Insieme alle risposte di cui sopra, puoi farlo anche tu
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Per dimostrare C'è più di un sei modi per farlo:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
Se il 1.metodo (: +) non fosse possibile, potresti anche farlo
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Certo, è eccessivo in questo scenario, ma se plus_1
fosse un'espressione molto lunga, potresti metterla su una riga separata dalla creazione dell'array.
Tu puoi fare
array = ['1', '2', '3']
Come altri hanno notato, puoi anche inizializzare un array con la notazione% w in questo modo:
array = %w(1 2 3)
o
array = %w[1 2 3]
Si noti che in entrambi i casi ogni elemento è una stringa, anziché un numero intero. Quindi, se vuoi un array i cui elementi sono numeri interi, non dovresti racchiudere ogni elemento con apostrofi:
array_of_integers = [1, 2, 3]
Inoltre, non è necessario inserire una virgola tra gli elementi (che è necessario quando si crea un array senza questa notazione% w). Se lo fai (cosa che ho fatto spesso per errore), come in:
wrong_array = %w(1, 2, 3)
i suoi elementi saranno tre stringhe ---- "1,", "2", "3". Quindi se lo fai:
puts wrong_array
l'output sarà:
1,
2,
3
=>nil
che non è quello che vogliamo qui.
Spero che questo aiuti a chiarire il punto!
Per creare un tale array potresti fare:
array = ['1', '2', '3']
Se hai un array di stringhe, puoi anche inizializzarlo in questo modo:
array = %w{1 2 3}
separa semplicemente ogni elemento con uno spazio vuoto
Puoi farlo semplicemente con la %w
notazione negli array di rubini.
array = %w(1 2 3)
Aggiungerà i valori dell'array 1,2,3 all'array e stamperà l'output come ["1", "2", "3"]