将数组存储到另一个数组中,得到意想不到的结果?
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
我是 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