这是如何检查2D数组中的周围单元格的

时间:2017-05-21 23:45:10

标签: ruby multidimensional-array

我正在尝试用红宝石写一个战舰游戏。我遇到了一个我认为我掌握的代码片段,但希望大家都能提供一些澄清。 [-1,0,1]是扔我的东西。这是检查2D阵列。一如既往地感谢您的帮助。

def neighbors
  @neighbors ||= [-1, 0, 1].repeated_permutation(2).map do |dx, dy|
    @grid[x + dx, y + dy] unless dx.zero? && dy.zero?
  end.compact
end

我想我最终可能已经弄明白了。 repeated_permutation(2)使用[-1,0,1]中的值来搜索"单元格"问题。

2 个答案:

答案 0 :(得分:0)

如果||=响应@neighborsnil)对象类型或NilClassfalse)对象值,FalseClass意味着什么?它将采用您在右侧分配的值来表示以下结果:

[-1, 0, 1].repeated_permutation(2).map do |dx, dy|
  @grid[x + dx, y + dy] unless dx.zero? && dy.zero?
end.compact

使用||=就像使用x || x = ax = a unless x一样,但是以Ruby的方式易于阅读,易于理解,易于使用。

[-1, 0, 1].repeated_permutation(2).map尝试做的是将repeated_permutation的结果映射到[-1, 0, 1]数组上,并在排列中取第一个和第二个值,然后设置您的@grid变量可能(因为我不能说出@grid}作为一个范围,从dx加上x开始,然后{ {1}}加dy,除非ydx的值同时为dy0)。然后&&"映射"结果

您可能希望看到Array#repeated_permutationArray#permutation

答案 1 :(得分:0)

快速&脏排列就像一系列数字的微小变化([链接到更深入])1。您正在查看的是由.repeated_permutations更改的数组,以查找每个值的所有选项&然后将结果添加到原始x& y coords ...

|| =&除非部分只是检查以确保代码不在0的运行...