[英]How to initialize all the values of a two dimensional array using Ruby, is there any way to do it in 1 step?
[英]How to initialize an array in one step using Ruby?
我用這種方式初始化一個數組:
array = Array.new
array << '1' << '2' << '3'
是否有可能一步到位? 如果是這樣,怎么樣?
您可以使用數組文字:
array = [ '1', '2', '3' ]
您還可以使用范圍:
array = ('1'..'3').to_a # parentheses are required
# or
array = *('1'..'3') # parentheses not required, but included for clarity
對於以空格分隔的字符串數組,可以使用Percent String語法 :
array = %w[ 1 2 3 ]
您還可以將塊傳遞給Array.new
以確定每個條目的值是什么:
array = Array.new(3) { |i| (i+1).to_s }
最后,雖然它不會產生與上面其他答案相同的三個字符串數組,但請注意,您可以使用Ruby 1.8.7+中的枚舉器來創建數組; 例如:
array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]
Oneliner:
array = [] << 1 << 2 << 3 #this is for fixnums.
要么
a = %w| 1 2 3 4 5 |
要么
a = [*'1'..'3']
要么
a = Array.new(3, '1')
要么
a = Array[*'1'..'3']
除了上述答案,您也可以這樣做
=> [*'1'.."5"] #remember *
=> ["1", "2", "3", "4", "5"]
為了證明有一個以上的六種方法做到這一點:
plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]
如果1.method(:+)不可能,你也可以這樣做
plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]
當然,在這種情況下它太過分了,但如果plus_1
是一個非常長的表達式,你可能想把它放在與數組創建不同的一行上。
如果你有一個字符串數組,你也可以像這樣初始化它:
array = %w{1 2 3}
用任何空格分隔每個元素
你可以做
array = ['1', '2', '3']
正如其他人所說,你也可以使用%w表示法初始化數組,如下所示:
array = %w(1 2 3)
要么
array = %w[1 2 3]
請注意,在這兩種情況下,每個元素都是一個字符串,而不是整數。 因此,如果你想要一個元素為整數的數組,你不應該用撇號包裝每個元素:
array_of_integers = [1, 2, 3]
此外,您不需要在元素之間放置逗號(這在創建沒有此%w表示法的數組時是必需的)。 如果你這樣做(我經常誤做),如:
wrong_array = %w(1, 2, 3)
它的元素將是三個字符串----“1”,“2”,“3”。 所以,如果你這樣做:
puts wrong_array
輸出將是:
1,
2,
3
=>nil
這不是我們想要的。
希望這有助於澄清這一點!
要創建這樣的數組,您可以:
array = ['1', '2', '3']
您可以通過在[]
編寫元素來一步初始化數組,如下所示:
array = ['1', '2', '3']
您可以使用ruby數組中的%w
表示法執行此操作。
array = %w(1 2 3)
它會將數組值1,2,3添加到數組中並將輸出打印為["1", "2", "3"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.