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

Arrays 如何将元素推送到数组中的数组?,arrays,ruby,Arrays,Ruby,假设我想创建一个新的数组 arr = Array.new(5,[]) => [[], [], [], [], []] 如何将一个元素推送到其中一个数组中 当我尝试只推送到其中一个数组时,该值总是添加到所有数组中: arr[3].push("foo") => ["foo"] arr => [["foo"], ["foo"], ["foo"], ["foo"], ["foo"]] 问题不在于你推动的方式,而在于你创建阵列的方式 该数组通过对同一数组的5个引用进行初始化,因此当

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

arr = Array.new(5,[])
=> [[], [], [], [], []]
如何将一个元素推送到其中一个数组中

当我尝试只推送到其中一个数组时,该值总是添加到所有数组中:

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

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

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

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

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

arr = Array.new(5) { [] }
执行该块(
{}
之间的位)以创建所有5个数组项,因此您将得到5个不同的数组

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

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

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

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

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

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

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

arr = Array.new(5) { [] }
执行该块(
{}
之间的位)以创建所有5个数组项,因此您将得到5个不同的数组

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

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

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

arr
=> [[], [], [], ["foo"], []]
请参阅文档中有关
Array.new
的部分。请参阅文档中有关
Array.new
的部分。