2016-09-13 12 views
2

私は初心者であり、行列を作成したい。たとえば:Ruby:配列の要素への割り当て

irb(main):001:0> t = [[1]*3]*3 
=> [[1, 1, 1], [1, 1, 1], [1, 1, 1]] 
irb(main):002:0> (0...3).each do |x| t[x][x]=x end 
=> 0...3 
irb(main):003:0> t 
=> [[0, 1, 2], [0, 1, 2], [0, 1, 2]] # why all values changed? 

は何が悪いのでしょうか?

答えて

2

新しい行ごとの配列が、参照すべての行で同じ配列cretaeしない配列を構築する方法:

a = [1, 1, 1] 
t = [a, a, a] 

試してみてください。

t.each do |row| 
    p row.object_id 
end 

# 70325094342320 
# 70325094342320 
# 70325094342320 

それは同じですこれは違いを見るために:

t = [[1] * 3, [1] * 3, [1] * 3] 
関連する問題