Bir diziyi şu şekilde başlatıyorum:
array = Array.new
array << '1' << '2' << '3'
Bunu tek adımda yapmak mümkün mü? Öyleyse nasıl?
array = Array.new << 1 << 2 << 3
:;)
1
üzere '1'
.
Bir diziyi şu şekilde başlatıyorum:
array = Array.new
array << '1' << '2' << '3'
Bunu tek adımda yapmak mümkün mü? Öyleyse nasıl?
array = Array.new << 1 << 2 << 3
:;)
1
üzere '1'
.
Yanıtlar:
Bir dizi değişmezi kullanabilirsiniz:
array = [ '1', '2', '3' ]
Ayrıca bir aralık da kullanabilirsiniz:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
Boşluklarla sınırlanmış dizelerden oluşan diziler için Yüzde Dize sözdizimini kullanabilirsiniz :
array = %w[ 1 2 3 ]
Array.new
Her bir girişin değerinin ne olacağını belirlemek için bir blok da geçebilirsiniz :
array = Array.new(3) { |i| (i+1).to_s }
Son olarak, yukarıdaki diğer yanıtlarla aynı dizge dizisini üretmese de, diziler oluşturmak için Ruby 1.8.7+ içinde numaralandırıcıları kullanabileceğinizi unutmayın; Örneğin:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
to_a
( [*'1'..'3']
) yerine sıçramayı tercih etsem bile .
Array[ "1","2","3"] #=> ["1","2","3"]
(Bu yöntemin dizi değişmez yapıcısı ile ilgisi olduğunu düşünmüyorum). Üst düzey Kernel # Array(1..5) #=> [1,2,3,4,5]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
veya
a = %w| 1 2 3 4 5 |
veya
a = [*'1'..'3']
veya
a = Array.new(3, '1')
veya
a = Array[*'1'..'3']
[1,2,3]
tek bir başlatmanın aksine diziyi aşamalı olarak büyüttü. Ayrıca seninki daha çok karakter. Ayrıca, OP bir dizi dizi hakkında soru sorarken, bir Fixnum dizisi oluşturdunuz.
Yukarıdaki cevapların yanı sıra bunu da yapabilirsiniz
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
>> [*?1..?5] #=> ["1", "2", "3", "4", "5"]
.
More Than var kanıtlamak için bir Altı Yolları için Do It:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
1. yöntem (: +) mümkün değilse, bunu da yapabilirdiniz
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
Elbette, bu senaryoda aşırıdır, ancak plus_1
gerçekten uzun bir ifadeyse, onu dizi oluşturmadan ayrı bir satıra koymak isteyebilirsiniz.
Yapabilirsin
array = ['1', '2', '3']
Diğerlerinin de belirttiği gibi, bir diziyi% w gösterimi ile şu şekilde başlatabilirsiniz:
array = %w(1 2 3)
veya
array = %w[1 2 3]
Lütfen her iki durumda da her elemanın bir tamsayı değil, bir dizge olduğunu unutmayın. Dolayısıyla, öğeleri tam sayı olan bir dizi istiyorsanız, her öğeyi kesme işaretleriyle sarmamalısınız:
array_of_integers = [1, 2, 3]
Ayrıca, öğeler arasına virgül koymanıza gerek yoktur (bu,% w gösterimi olmadan bir dizi oluştururken gereklidir). Bunu yaparsanız (genellikle yanlışlıkla yaptım), aşağıdaki gibi:
wrong_array = %w(1, 2, 3)
elemanları üç dize olacaktır ---- "1,", "2,", "3". Yani yaparsan:
puts wrong_array
çıktı:
1,
2,
3
=>nil
Burada istediğimiz şey bu değil.
Umarım bu, noktayı netleştirmeye yardımcı olur!
Böyle bir dizi oluşturmak için şunları yapabilirsiniz:
array = ['1', '2', '3']
Bir dizi diziniz varsa, bunu şu şekilde de başlatabilirsiniz:
array = %w{1 2 3}
sadece her bir öğeyi herhangi bir boşlukla ayırın
Bunu %w
ruby dizilerinde gösterimlerle kolayca yapabilirsiniz .
array = %w(1 2 3)
1,2,3 dizi değerlerini diziye ekleyecek ve çıktıyı şu şekilde yazdıracaktır: ["1", "2", "3"]