检查一个数组中的所有字符串是否都在另一个数组中

Tal*_*l C 1 ruby arrays

这是一个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)

Ste*_*fan 5

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使用find,如果你只是要检索的第一个赢取的组合.