gpt4 book ai didi

ruby - 如何填充数组的数组(二维数组)

转载 作者:太空宇宙 更新时间:2023-11-03 17:07:30 25 4
gpt4 key购买 nike

我在尝试用循环变量填充数组数组时注意到一个奇怪的行为。

N = 5
M = 4

m = Array.new(N, Array.new(M, -1))
for j in 0..N-1
m[j][0] = j
end

m

这样做最终会得到:

4 -1 -1 -1
4 -1 -1 -1
4 -1 -1 -1
4 -1 -1 -1
4 -1 -1 -1

但我预计:

0 -1 -1 -1
1 -1 -1 -1
2 -1 -1 -1
3 -1 -1 -1
4 -1 -1 -1

另一方面,这按预期工作:

N = 5

m = Array.new(N)
for i in 0..N-1
m[i] = i
end

puts m # => [0, 1, 2, 3, 4]

我在这里错过了什么?

最佳答案

m = Array.new(N, Array.new(M, -1)) 创建一个大小为 N 的数组,每个成员都是 同一对象 - 大小为 -1 的 M 数组。因此,当您设置内部数组的第一个元素时,更改会反射(reflect)在每个外部数组中,因为它们都包含相同的对象

相反,使用 block 形式:

Array.new(N) { Array.new(M, -1) }

为外部数组的每个元素调用该 block ,导致每个元素获得一个不同的新内部数组。

关于ruby - 如何填充数组的数组(二维数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21784151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com