如果相邻数组值为空,则如何选择相邻的数组值

  • 本文关键字:数组 选择 何选择 如果 ruby
  • 更新时间 :
  • 英文 :


我正在尝试弄清楚如果数组值与填充数组值相邻并且为空,则如何选择数组值。

因此,假设数组引用的网格是这样布局的。

a1,a2,a3,
b1,b2,b3,
c1,c2,c3

如果 a1 包含 X,则网格现在将如下所示。

X,a2,a3,
b1,b2,b3,
c1,c2,c3

我希望该方法能够找到相邻的数组值,在本例中为 a2、b1 和 b2。

但在下一个情况下,O 保持中心值。

X,a2,a3,
b1,O,b3,
c1,c2,c3  

。该方法将选择 A2、B1

任何人都可以提供解决方案或提示吗?

这是一个简单的井字游戏网格

下面看看网格所在的类。

class Board
attr_reader :grid
def initialize(cell_value = " ")
@grid = {
a1: cell_value, a2: cell_value, a3: cell_value,
b1: cell_value, b2: cell_value, b3: cell_value,
c1: cell_value, c2: cell_value, c3: cell_value
}
end
def printgrid
board = "n"
board << "a #{@grid[:a1]}|#{@grid[:a2]}|#{@grid[:a3]} n"
board << "----------n"
board << "b #{@grid[:b1]}|#{@grid[:b2]}|#{@grid[:b3]} n"
board << "----------n"
board << "c #{@grid[:c1]}|#{@grid[:c2]}|#{@grid[:c3]} n"
board << "----------n"
board << "  1 2 3n"
end
def space_taken?(cell_location)
cell_value = cell_location
@grid[cell_value] != " "
end
end

您可以实现一种方法来确定单元格是否在X旁边:

def next_to_x?(cell_location)
case cell_location
when :a1
@grid[:a2] == 'X' or @grid[:b1] == 'X' or @grid[:b2] == 'X'
when :a2
@grid[:a1] == 'X' or @grid[:a3] == 'X' or @grid[:b1] == 'X' or @grid[:b2] == 'X' or @grid[:b3] == 'X'
# ...
end
end

然后,要查找所有既为空又靠近X的单元格:

[:a1, :a2, :a3, :b1, :b2, :b3, :c1, :c2, :c3].find_all { |cell_location|
!space_taken(cell_location) and next_to_x?(cell_location)
}

最新更新