【问题标题】:Selecting hash element if 'key' or 'value' contains a value in ruby如果 'key' 或 'value' 包含 ruby​​ 中的值,则选择哈希元素
【发布时间】:2017-05-09 15:18:48
【问题描述】:

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

目前我正在这样做:

 #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

Outcome 在这里找到所有包含 bot 和 input 的哈希元素;然后检查他们有哪些共同点。 只是想知道我是否有一种方法可以返回我想要的:

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

【问题讨论】:

    标签: ruby methods hash


    【解决方案1】:

    这是你要找的吗?

    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来避免使用!!?
    猜你喜欢
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多