我试图将一些值附加到数组数组中的特定数组,如下所示:
a1 = [[]] * 2
a1[0] << -1
a1 # => [[-1], [-1]]
a2 = [[], []]
a2[0] << -1
a2 # => [[-1], []]
[[]] * 2 == [[], []] # => true
a2
具有预期值,而a1
似乎有误。自从我更改a1
&amp;之后,我期待[[-1], []]
的值为a1[0]
不是a1[1]
。
答案 0 :(得分:11)
您应该使用:
a1 = Array.new(2) { [] }
[[]]*2
用于重复,只是重复同一个对象[]
两次。
支持我的上述观点:
a1 = [[]] * 2
a1.map(&:object_id)
#=> [26686760, 26686760] # same object ids
a3 = Array.new(2) { [] }
a3.map(&:object_id)
#=> [23154760, 23154680] # different object ids
答案 1 :(得分:2)
a1
中的两个子数组都是相同的Array
对象。