我试图将一些值附加到数组数组中的特定数组,如下所示:
a1 = [[]] * 2 a1[0] << -1 a1 # => [[-1], [-1]] a2 = [[], []] a2[0] << -1 a2 # => [[-1], []] [[]] * 2 == [[], []] # => true
a2
具有预期价值,而a1
似乎是错误的.我所期待的是a1
,[[-1], []]
因为我改变了a1[0]
而不是a1[1]
.
你应该使用:
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