我正在尝试创建一个简单的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?
处的单元格的值答案 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) }