使用二维数组处理康威的生命游戏版本,当尝试计算每个单元格的“邻居”总数时,我一直被零值阻塞。如何将数组中的nil转换为0来获得总和?
def neighbor_count
grid.each_with_index do |row, idx|
row.each_with_index do |column, idx2|
[grid[idx - 1][idx2 - 1], grid[idx - 1][idx2], grid[idx - 1][idx2 + 1],
grid[idx][idx2 - 1], grid[idx][idx2], grid[idx][idx2 + 1],
grid[idx + 1][idx2 - 1], grid[idx + 1][idx2], grid[idx + 1][idx2 + 1]
].compact.sum
end
end
end
.compact似乎产生最的结果,如果包括在阵列前面的“看跌期权”,但没有的我已经试过的选项给我100%。我试过减少(:+),注入,.to_i,拒绝(摆脱零值),等等。
这里缺少什么?
错误:world.rb:35:在block (2 levels) in neighbor_count': undefined method
[]”为零:NilClass(NoMethodError)
第35行是上述] .compact.sum线
谢谢。我明白了,因为它会产生零值。有关如何有效排除任何超出边界的坐标的建议? –
@JeremyFlanagan:是的,有些人会做得很好。 –
@JeremyFlanagan:这是我在_years_之前编码的生活游戏。所以没有判断的代码https://gist.github.com/stulentsev/0e25ae7b079466412a87de26fc4f11be :) –