我想从给定的哈希键中打印一个键,但我找不到一个简单的解决方案:
myhash = Hash.new
myhash["a"] = "bar"
# not working
myhash.fetch("a"){|k| puts k }
# working, but ugly
if myhash.has_key("a")?
puts "a"
end
还有其他办法吗?
答案 0 :(得分:14)
要从哈希中获取所有密钥,请使用keys方法:
{ "1" => "foo", "2" => "bar" }.keys
=> ["1", "2"]
答案 1 :(得分:10)
我知道这是一个较老的问题,但我认为最初的提问者想要的是找到钥匙,因为他不知道它是什么;例如,在遍历哈希时。
获取哈希密钥的其他几种方法:
给定哈希定义:
myhash = Hash.new
myhash["a"] = "Hello, "
myhash["b"] = "World!"
你第一次尝试的原因不起作用:
#.fetch just returns the value at the given key UNLESS the key doesn't exist
#only then does the optional code block run.
myhash.fetch("a"){|k| puts k }
#=> "Hello!" (this is a returned value, NOT a screen output)
myhash.fetch("z"){|k| puts k }
#z (this is a printed screen output from the puts command)
#=>nil (this is the returned value)
所以如果你想在迭代哈希时抓住密钥:
#when pulling each THEN the code block is always run on each result.
myhash.each_pair {|key,value| puts "#{key} = #{value}"}
#a = Hello,
#b = World!
如果你只是进入单行并希望:
获取给定密钥的密钥(不知道为什么,因为您已经知道密钥):
myhash.each_key {|k| puts k if k == "a"}
#a
获取给定值的密钥:
myhash.each_pair {|k,v| puts k if v == "Hello, "}
#a
答案 2 :(得分:6)
我不太明白。如果您已经知道puts
值为"a"
,那么您只需要puts "a"
。
有意义的是搜索给定值的键,如下所示:
puts myhash.key 'bar'
=> "a"
或者,如果不知道密钥是否存在于哈希中,并且您希望仅在它存在时才打印它:
puts "a" if myhash.has_key? "a"