我在ruby中有一个嵌套的哈希,我需要访问它的特定值。我的哈希看起来如下。
hash =
{"list"=>
{"0"=>
{"date"=>"11/03/2014",
"item1"=>"",
"tiem2"=>"News",
"item3"=>"",
"item4"=>"",
"item5"=>"Videos",
"Type"=>"Clip"},
"1"=>
{"date"=>"11/03/2014",
"item1"=>"",
"tiem2"=>"News",
"item3"=>"",
"item4"=>"",
"item5"=>"Videos",
"Type"=>"Program"}
}}
我需要访问每个键的“Type”值。 我尝试使用下面的代码,但我不确定它为什么不起作用。
hash_type = hash["list"].keys.each {|key| puts key["Type"]}
但它返回了密钥列表。即0和1
请帮忙。
答案 0 :(得分:3)
hash["list"].map {|_, hash| hash['Type']}
说明:
hash = {key: 'value'}
您可以使用each
循环遍历哈希:
hash.each {|pair| puts pair.inspect } #=> [:key, 'value']
或者像这样
hash.each {|key, value| puts "#{key}: #{value}"} #=> key: value
由于我们不在任何地方使用密钥,因此某些IDE会抱怨未使用的局部变量key
。为了防止这种情况,使用_
作为变量名称是不明智的惯例,并且所有IDE都不关心它是否未被使用。
答案 1 :(得分:2)
hash['list'].collect { |_, value| value['Type'] }
=> ["Clip", "Program"]
答案 2 :(得分:0)
这是遵循你的逻辑(一些答案以不同的方式发布)。如果我们一步一步走,你出错的原因是:
hash_type = hash["list"].keys #=> ["0", "1"]
所以之后的一切都是这样的:
["0", "1"].each {|key| puts key["Type"]}
所以你基本上做了放置'1'['Type']
和'0'['Type']
,它们都评估为nil
(在IRB中尝试)。尝试将puts
替换为p
,然后您将无法打印2次。您hash_type
成为[" 0"," 1"]的原因是您的上一个表达式是keys.each
和{{1总是返回"接收器",就是你调用each
的数组(如前所述,该数组是[" 0"," 1"。])
按照你的特定逻辑解决这个问题的关键是把"键和#34; (在适当的上下文中是' 0'以及' 1'并且将它们放在上下文中会看起来像这样:
each
这将打印键。但是,hash_type仍然是[" 0"," 1"](记住,hash_type = hash["list"].keys.each {|key| puts hash["list"][key]["Type"]}`
返回接收者的值)。如果您希望将实际类型值存储在hash_types中,请将each
替换为each
并删除map
:
puts