12

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

就像关键的“鱼”一样,我需要打印“鱼”=>“水生动物”

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

我对 ruby​​ 很陌生,所以很抱歉这个菜鸟问题。

4

5 回答 5

15

有一种方法,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"}
于 2012-08-21T02:45:20.197 回答
8

在红宝石中 >= 1.9

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

在红宝石中 < 1.9

value_hash = Hash[k1, h1[k1]]
p value_hash                 # {"fish"=>"aquatic animal"}
于 2012-08-21T05:01:35.620 回答
2

最简单的答案:

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

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

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

于 2014-09-04T20:20:34.043 回答
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"}

清晰、简单、高效

于 2021-04-06T13:52:42.777 回答
0

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

于 2012-08-21T02:44:02.867 回答