Saya menginisialisasi array dengan cara ini:
array = Array.new
array << '1' << '2' << '3'
Apakah mungkin melakukan itu dalam satu langkah? Jika ya, bagaimana caranya?
array = Array.new << 1 << 2 << 3
)
1
ke '1'
.
Saya menginisialisasi array dengan cara ini:
array = Array.new
array << '1' << '2' << '3'
Apakah mungkin melakukan itu dalam satu langkah? Jika ya, bagaimana caranya?
array = Array.new << 1 << 2 << 3
)
1
ke '1'
.
Jawaban:
Anda dapat menggunakan literal array:
array = [ '1', '2', '3' ]
Anda juga dapat menggunakan rentang:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
Untuk array string yang dipisahkan spasi, Anda dapat menggunakan sintaks Percent String :
array = %w[ 1 2 3 ]
Anda juga dapat memberikan satu blok ke Array.new
untuk menentukan berapa nilai untuk setiap entri:
array = Array.new(3) { |i| (i+1).to_s }
Akhirnya, meskipun tidak menghasilkan larik tiga string yang sama seperti jawaban lain di atas, perhatikan juga bahwa Anda dapat menggunakan enumerator di Ruby 1.8.7+ untuk membuat larik; sebagai contoh:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
).
Array[ "1","2","3"] #=> ["1","2","3"]
(Saya tidak berpikir metode ini ada hubungannya dengan konstruktor literal array). Anda juga dapat menggunakan Kernel # Array tingkat atas (nama metode terlihat seperti nama kelas)Array(1..5) #=> [1,2,3,4,5]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
atau
a = %w| 1 2 3 4 5 |
atau
a = [*'1'..'3']
atau
a = Array.new(3, '1')
atau
a = Array[*'1'..'3']
[1,2,3]
yang melakukan inisialisasi tunggal. Juga, milikmu lebih banyak karakter. Juga, Anda telah membuat sebuah array Fixnums sedangkan OP menanyakan tentang sebuah array string.
Bersamaan dengan jawaban di atas, Anda juga bisa melakukan ini
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
Untuk membuktikan Ada Lebih dari Satu Enam Cara Untuk Melakukannya:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
Jika 1.method (: +) tidak memungkinkan, Anda juga bisa melakukannya
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Tentu, ini berlebihan dalam skenario ini, tetapi jika plus_1
ekspresi yang sangat panjang, Anda mungkin ingin meletakkannya di baris terpisah dari pembuatan array.
Anda dapat melakukan
array = ['1', '2', '3']
Seperti yang dicatat orang lain, Anda juga bisa menginisialisasi array dengan notasi% w seperti ini:
array = %w(1 2 3)
atau
array = %w[1 2 3]
Harap dicatat bahwa dalam kedua kasus, setiap elemen adalah string, bukan integer. Jadi, jika Anda menginginkan array yang elemennya bilangan bulat, Anda tidak boleh membungkus setiap elemen dengan apostrof:
array_of_integers = [1, 2, 3]
Selain itu, Anda tidak perlu meletakkan koma di antara elemen (yang diperlukan saat membuat array tanpa notasi% w ini). Jika Anda melakukan ini (yang sering saya lakukan karena kesalahan), seperti di:
wrong_array = %w(1, 2, 3)
elemennya akan menjadi tiga string ---- "1,", "2,", "3". Jadi jika Anda melakukannya:
puts wrong_array
outputnya adalah:
1,
2,
3
=>nil
yang bukan yang kita inginkan di sini.
Semoga ini bisa membantu memperjelas maksudnya!
Untuk membuat array seperti itu, Anda dapat melakukan:
array = ['1', '2', '3']
Jika Anda memiliki Array string, Anda juga dapat menginisialisasinya seperti ini:
array = %w{1 2 3}
pisahkan setiap elemen dengan spasi
Anda dapat menginisialisasi array dalam satu langkah dengan menulis elemen []
seperti ini:
array = ['1', '2', '3']
Anda cukup melakukan ini dengan %w
notasi dalam array ruby.
array = %w(1 2 3)
Ini akan menambahkan nilai array 1,2,3 ke array dan mencetak output sebagai ["1", "2", "3"]