如何将元素推送到数组中的数组?

时间:2018-06-06 10:11:23

标签: arrays ruby

假设我想创建一个新的数组数组

arr = Array.new(5,[])
=> [[], [], [], [], []]

如何将元素专门推送到其中一个数组?

当我尝试仅推送其中一个数组时,该值始终会添加到所有数组中:

arr[3].push("foo")
=> ["foo"]

arr
=> [["foo"], ["foo"], ["foo"], ["foo"], ["foo"]]

1 个答案:

答案 0 :(得分:3)

问题不在于您推动的方式,而是您创建阵列的方式。

数组初始化为对同一个数组的5个引用,因此当您修改其中一个时,所有其他副本也会更改。

您需要使用其他方法创建阵列,以便创建五个不同的阵列而不是同一阵列的五个副本。这可以这样做:

arr = Array.new(5) { [] }

执行块({}之间的位)以创建所有5个数组项,因此最终得到5个不同的数组。

然后您的代码按预期工作:

arr = Array.new(5) { [] }
=> [[], [], [], [], []]

arr[3].push("foo")
=> ["foo"]

arr
=> [[], [], [], ["foo"], []]