设置嵌套数组中元素的值

时间:2013-04-02 21:21:35

标签: ruby

我正在尝试创建一个简单的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?

处的单元格的值

1 个答案:

答案 0 :(得分:5)

我明白了。当我用@board初始化Array.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) }