gpt4 book ai didi

ruby - 设置嵌套数组中元素的值

转载 作者:数据小太阳 更新时间:2023-10-29 08:32:45 24 4
gpt4 key购买 nike

我正在尝试创建一个简单的 10x10 数组,以便我可以创建 Conway 的生命游戏,但我遇到了一些奇怪的行为。首先我初始化电路板:

@board = Array.new(10, Array.new(10))
(0..9).each do |row|
(0..9).each do |column|
@board[row][column] = rand(0..1)
end
end

产生这个:

1000000111
1000000111
1000000111
1000000111
1000000111
1000000111
1000000111
1000000111
1000000111
1000000111
1000000111

看起来很可疑,但这完全有可能是随机生成的。当我尝试设置单个单元格的值时,真正的问题就开始了。当我更改值时,它会将整列设置为该值!例如,假设我更改了第一个单元格的值:

@board[0][0] = 0

我得到的是:

0000000111
0000000111
0000000111
0000000111
0000000111
0000000111
0000000111
0000000111
0000000111
0000000111
0000000111

什么给了?为什么第 0 列中所有单元格的值都会发生变化,而不仅仅是第 0、0 处的单元格?

最佳答案

我想通了。当我用 Array.new(10, Array.new(10)) 初始化 @board 时,它创建了一个包含 10 个相同数组的数组。也就是说,每个 Array 都有相同的 object_id。

@board[0].object_id
=> 22148328
@board[1].object_id
=> 22148328

我使用 map 方法解决了这个问题:

@board = Array.new(10).map{ |x| Array.new(10) }

关于ruby - 设置嵌套数组中元素的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15774634/

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