簡體   English   中英

如何使用Ruby一步初始化數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM