将数组存储到另一个数组中,得到意想不到的结果?

Storing array into another array, getting an unexpected result?

我是 Ruby 的新手。我遇到了一些我无法解释的事情。

这是我的代码:

arr1 = []
arr2 = [0]

5.times{
  arr2[0] += 1
  arr1 << arr2
  }
puts "result = #{arr1}"

我期待以下结果:

result = [[1],[2],[3],[4],[5]]

但是,这是我得到的结果:

result = [[5],[5],[5],[5],[5]]

有人可以向我解释为什么会这样吗?我该如何解决?

非常感谢,

所以,您不仅仅是将 arr1 的值添加到 arr2。您实际上是将 arr1 本身添加到 arr2。然后你再次将 arr1 添加到 arr2,现在它有两次相同的数组。

您可能想要将 arr1 的副本添加到 arr2。

arr1 << arr2.dup

我看到的问题是您更改了可变结构的值。

你不断改变 arr2 并将相同的实例插入 arr1

如果你跟踪整个执行过程

arr2[0] +=1  # arr1 = [],    arr2 = [1]
arr1 << arr2 # arr1 = [[1]], arr2 = [1]

arr2[0] +=1  # arr1 = [[2]],     arr2 = [2]
arr1 << arr2 # arr1 = [[2],[2]], arr2 = [2]

arr2[0] +=1  # arr1 = [[3],[3]],     arr2 = [3]
arr1 << arr2 # arr1 = [[3],[3],[3]], arr2 = [3]

...

您可以通过执行以下操作验证它是否与您插入的实例相同:

arr1.map(&:hash).uniq