访问ruby中哈希值的哈希值

时间:2014-11-04 12:41:06

标签: ruby

我在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

请帮忙。

3 个答案:

答案 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