当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《检查一个数组中的所有字符串是否都在另一个数组中》经验,为你挑选了1个好方法。

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

如何使用中找到的组合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]

Stefan.. 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]]

说明:

select返回块返回的所有元素true.

values_at 返回指定索引处的值:

board.values_at(*[0, 1, 2])
#=> ["X", "O", "X"]

* 将数组转换为参数列表,因此上面变为 values_at(0, 1, 2)

join 返回带有连接元素的字符串:

["X", "O", "X"].join
#=> "XOX"

=~检查字符串是否与正则表达式 匹配/XXX|OOO/,即XXX或者OOO

您可以替换select使用find,如果你只是要检索的第一个赢取的组合.



1> Stefan..:

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]]

说明:

select返回块返回的所有元素true.

values_at 返回指定索引处的值:

board.values_at(*[0, 1, 2])
#=> ["X", "O", "X"]

* 将数组转换为参数列表,因此上面变为 values_at(0, 1, 2)

join 返回带有连接元素的字符串:

["X", "O", "X"].join
#=> "XOX"

=~检查字符串是否与正则表达式 匹配/XXX|OOO/,即XXX或者OOO

您可以替换select使用find,如果你只是要检索的第一个赢取的组合.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有