如果';键';或';价值';包含ruby中的值

如果';键';或';价值';包含ruby中的值,ruby,methods,hash,Ruby,Methods,Hash,我想知道是否有一种方法可以在哈希表中搜索包含值的键和值 目前我正在这样做: #for this example say bot,input = "rock","scissors" hash = Hash['rock', 'scissors', 'scissors', 'paper', 'paper', 'rock'] outcome = ([hash.rassoc(bot), hash.assoc(bot)] & [hash.rassoc(input),hash.assoc

我想知道是否有一种方法可以在哈希表中搜索包含值的键和值

目前我正在这样做:

 #for this example say 
 bot,input = "rock","scissors" 

hash = Hash['rock', 'scissors', 'scissors', 'paper', 'paper', 'rock'] 
outcome = ([hash.rassoc(bot), hash.assoc(bot)] &  [hash.rassoc(input),hash.assoc(input)]).flatten
这里的结果查找包含bot和input的所有哈希元素;然后检查他们的共同点。 我只是想知道是否有一种方法我过多地寻找来返回我想要的:

outcome = [hash.rassoc(bot), hash.assoc(bot)]

这就是你要找的吗

winners = { "rock"=>"scissors", "scissors"=>"paper", "paper"=>"rock" } 

def outcome(winners, player, opponent)
  return :win  if winners.any? { |pair| pair == [player, opponent] }
  return :lose if winners.any? { |pair| pair == [opponent, player] }
  return :tie
end

outcome winners, "rock", "scissors" #=> :win
outcome winners, "scissors", "rock" #=> :lose
outcome winners, "rock", "rock"     #=> :tie

建议:使用
any?
而不是
find
,以避免使用