这是一个tic tac toe游戏.我有一个board包含九个字符串元素的数组,以及一个嵌套数组WIN_COMBINATIONS,其位置组合来自board:
board = ["X", "X", "X", " ", " ", " ", " ", " ", " "]
WIN_COMBINATIONS = [
[0, 1, 2],
[0, 3, 6],
[0, 4, 8],
[3, 4, 5],
[6, 7, 8],
[6, 4, 2],
[1, 4, 7],
[2, 5, 8]
]
Run Code Online (Sandbox Code Playgroud)
如何使用中找到的组合board全部"X"或全部选择阵列组合?"O"WIN_COMBINATIONS
例如,与上面的X在右对角线中胜出的板不同.
board = ["X", "O", "X", "O", "X", "O", "X", "X", "O"]
# X | O | X
# ---+---+---
# O | X | O
# ---+---+---
# X | X | O
won?(board) #=> [2,4,6]
Run Code Online (Sandbox Code Playgroud)
ndn的回答略有不同:
board = %w(X O X
O X O
X X O)
WIN_COMBINATIONS.select { |c| board.values_at(*c).join =~ /XXX|OOO/ }
#=> [[6, 4, 2]]
Run Code Online (Sandbox Code Playgroud)
说明:
select返回块返回的所有元素true.
values_at 返回指定索引处的值:
board.values_at(*[0, 1, 2])
#=> ["X", "O", "X"]
Run Code Online (Sandbox Code Playgroud)
* 将数组转换为参数列表,因此上面变为 values_at(0, 1, 2)
join 返回带有连接元素的字符串:
["X", "O", "X"].join
#=> "XOX"
Run Code Online (Sandbox Code Playgroud)您可以替换select使用find,如果你只是要检索的第一个赢取的组合.