在 Ruby 2.6.6 中,我想預先創建一個陣列陣列,并將一些值插入到一個索引中。我注意到的是陣列在這樣做時將所有值放入所有陣列中:
matrix = Array.new( 3, [] )
5.times do |n| matrix[0] << n end
p matrix
# outputs: [[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
我希望達到的目標:
[[0, 1, 2, 3, 4], [], []]
我應該如何以正確的方式做到這一點?
uj5u.com熱心網友回復:
這是您的陣列實體化的問題。
它應該是
matrix = Array.new(3){Array.new}
從2.6.6檔案中:
Array.new(3, true) #=> [true, true, true]請注意,第二個引數使用對同一物件的參考填充陣列。因此,僅在需要使用原生不可變物件(例如符號、數字、真或假)實體化陣列的情況下才建議使用。
要創建具有單獨物件的陣列,可以傳遞一個塊。此方法可以安全地用于可變物件,例如哈希、字串或其他陣列:
Array.new(4) {Hash.new} #=> [{}, {}, {}, {}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460551.html
