在ruby中获取给定键的键值哈希对

时间:2012-08-21 01:46:59

标签: ruby

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

喜欢关键'鱼' 我需要打印'fish'=> '水生动物'

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

我对红宝石很陌生,很抱歉这个虚假的问题。

5 个答案:

答案 0 :(得分:10)

有一种方法,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"}

答案 1 :(得分:7)

in ruby​​> = 1.9

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

in ruby​​< 1.9

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

答案 2 :(得分:2)

最简单的答案:

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

这将返回{'fish'=> '水生动物'}这就是你所需要的。

因为你已经拥有了它,所以没有必要跳过篮球来获得钥匙! : - )

答案 3 :(得分:2)

最简单和原生的方法是使用方法 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 :(得分:0)

我通过从键值对创建新哈希,然后使用puts h1输出其值来解决方法