2

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

@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 处的单元格?

4

1 回答 1

5

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

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

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

@board = Array.new(10).map{ |x| Array.new(10) }
于 2013-04-02T21:30:09.937 回答