在Ruby中,获取给定键的哈希键值对。

14

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

比如,对于键 'fish',我需要打印 'fish' => '水生动物'

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

我对 Ruby 还很陌生,所以对于这个新手问题请见谅。


1
Ruby哈希键使用[]访问,因此puts "fish => #{h1["fish"]} - Michael Berkowski
谢谢。但我需要以hash.inspect返回的格式化字符串形式输出结果。因此,我在想Ruby是否直接支持这种指定键的格式化输出方式。我的测试用例由于格式问题而无法通过。 - Himz
我有一个解决办法,通过创建一个新的哈希表,从键值对中提取数据,然后输出其值。 - Himz
5个回答

16

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

8

在Ruby的版本>= 1.9中

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

在Ruby < 1.9版本中

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

4
最简单和本地化的方法是使用 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"}

清晰、简单、高效


2
最简单的答案:
def find(k1)
  {k1 => h1[k1]}
end

这将返回 {'fish' => '水生动物'},这正是你所需要的内容。不需要费力去获取键,因为你已经拥有它!:-)

0

我找到了一个解决方法,通过创建一个新的哈希表,从键值对中提取其值,并使用puts h1输出它的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接