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
的部分。