【问题标题】:Get key value pair of hash for the given key , in ruby获取给定键的哈希键值对,在 ruby​​ 中
【发布时间】:2012-08-21 01:46:58
【问题描述】:

我有一个哈希 h1 和密钥 k1。我需要为哈希中的给定键返回完整的键值对。

喜欢关键的“鱼” 我需要打印“鱼”=>“水生动物”

@h1,打印所有键值对。我需要打印给定键的键值对的方法

我对 ruby​​ 很陌生,很抱歉提出这个问题。

【问题讨论】:

  • Ruby 哈希键使用[] 访问,所以puts "fish => #{h1["fish"]}
  • 谢谢,但我需要 hash.inspect 返回(格式化字符串)形式的输出。因此想知道 ruby​​ 是否直接支持指定键。我的测试用例由于格式问题而中断。
  • 我有一个解决方法,通过从键值对创建一个新的哈希,然后输出它的值

标签: ruby


【解决方案1】:

有一种方法,Hash#assoc 可以做类似的事情。但它返回数组中的键和值,您可以轻松地将其更改为哈希。 另一种方法是使用 Hash#select,它会根据给定的块返回一个哈希值。

h1 = { "fish" => "aquatic animal", "tiger" => "big cat" }
h1.assoc "fish"                       # ["fish", "aquatic animal"]
h1.select { |k,v| k == "fish" }       # {"fish"=>"aquatic animal"}

【讨论】:

    【解决方案2】:

    在红宝石中 >= 1.9

    value_hash = Hash[*h1.assoc(k1)]
    p value_hash                 # {"fish"=>"aquatic animal"}
    

    在红宝石中

    value_hash = Hash[k1, h1[k1]]
    p value_hash                 # {"fish"=>"aquatic animal"}
    

    【讨论】:

      【解决方案3】:

      最简单和原生的方法是使用方法slice

      h1 = { fish: 'aquatic animal', tiger: 'big cat', dog:  'best human friend' }
      k1 = :fish
      

      去做吧:

      h1.slice(k1)
      # => {:fish=>"aquatic animal"}
      

      更好的是,您可以为此使用多个键,例如,k1 和 k3

      k1 = :fish
      k3 = :dog
      
      h1.slice(k1, k3)
      # => {:fish=>"aquatic animal", :dog=>"best human friend"}
      

      清晰、简单、高效

      【讨论】:

        【解决方案4】:

        最简单的答案:

        def find(k1)
          {k1 => h1[k1]}
        end
        

        这将返回您需要的 {'fish' => 'aquatic animal'}。

        无需费力地获得钥匙,因为您已经拥有它! :-)

        【讨论】:

          【解决方案5】:

          我有一个解决方法,通过从键值对创建一个新的哈希,然后使用 puts h1 输出它的值

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-08-23
            • 1970-01-01
            • 2011-05-20
            • 2020-11-21
            • 2011-06-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多