假设我想创建一个新的数组数组
arr = Array.new(5,[])
=> [[], [], [], [], []]
如何将元素专门推送到其中一个数组?
当我尝试仅推送其中一个数组时,该值始终会添加到所有数组中:
arr[3].push("foo")
=> ["foo"]
arr
=> [["foo"], ["foo"], ["foo"], ["foo"], ["foo"]]
答案 0 :(得分:3)
问题不在于您推动的方式,而是您创建阵列的方式。
数组初始化为对同一个数组的5个引用,因此当您修改其中一个时,所有其他副本也会更改。
您需要使用其他方法创建阵列,以便创建五个不同的阵列而不是同一阵列的五个副本。这可以这样做:
arr = Array.new(5) { [] }
执行块({}
之间的位)以创建所有5个数组项,因此最终得到5个不同的数组。
然后您的代码按预期工作:
arr = Array.new(5) { [] }
=> [[], [], [], [], []]
arr[3].push("foo")
=> ["foo"]
arr
=> [[], [], [], ["foo"], []]