Ruby嵌套哈希的路径

时间:2012-09-07 11:01:12

标签: ruby hash

我有一个哈希,@data看起来类似于以下内容:

{
   "calcData"   =>   {
      "coverStartDate"      =>"10/08/2011",
      ...
      "part"=>      [
         {
            "licenceYears"            =>"10",
            "licenceType"            =>"1",

            ...

            "@partname"            =>"ratingData"
         },
         {                
            "dob"            =>"26/01/1964",
            "age"            =>"47",

            ...

            "@partname"            =>"driver"
         },

         ...
      ]
   }
}

part位中有不同的部分,差异为@partname s。

选择其中一个@partname位的最佳方法是什么:

e.g:

@data["calcData"]["part <<< where @partname="ratingData" >>> "]["licenceYears"]

我如何在ruby / rails中表示这个逻辑?

3 个答案:

答案 0 :(得分:2)

query = 'driver'

@data["calcData"]['part'].select{|part| part['@partname'].eql?query}
 => [{"dob"=>"26/01/1964", "age"=>"47", "@partname"=>"driver"}] 

答案 1 :(得分:0)

这是一种方法:

part = @data["calcData"]["part"]
keys = part.keys.select{|key| part["@partname"] == "ratingData"}
values = keys.collect{|key| part[key]["licenceYears"]}

你可以将它组合成一个衬里,但它并不容易阅读。

答案 2 :(得分:0)

使用Struct。

CalcData = Struct.new :coverStarDate, :part
calc_data = CalcData[ "10/08/2011",
                      { "licenceYears" => 10,
                        # etc.
                      } ]

因此,您可以摆脱顶级括号参考,广告,您可以说:

calc_data.part["licenceYears"]