0

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

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

            ...

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

            ...

            "@partname"            =>"driver"
         },

         ...
      ]
   }
}

位中有多个不同的部分,part差异为@partnames。

选择这些@partname位之一的最佳方法是什么:

例如:

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

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

4

3 回答 3

2
query = 'driver'

@data["calcData"]['part'].select{|part| part['@partname'].eql?query}
 => [{"dob"=>"26/01/1964", "age"=>"47", "@partname"=>"driver"}] 
于 2012-09-07T12:02:35.857 回答
0

这是一种方法:

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

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

于 2012-09-07T11:18:17.280 回答
0

使用结构。

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

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

calc_data.part["licenceYears"]
于 2012-09-07T11:57:48.100 回答