嵌套哈希的Ruby路径
我有一个散列,嵌套哈希的Ruby路径,ruby,hash,Ruby,Hash,我有一个散列,@data看起来类似于以下内容: { "calcData" => { "coverStartDate" =>"10/08/2011", ... "part"=> [ { "licenceYears" =>"10", "licenceType" =>"1",
@data
看起来类似于以下内容:
{
"calcData" => {
"coverStartDate" =>"10/08/2011",
...
"part"=> [
{
"licenceYears" =>"10",
"licenceType" =>"1",
...
"@partname" =>"ratingData"
},
{
"dob" =>"26/01/1964",
"age" =>"47",
...
"@partname" =>"driver"
},
...
]
}
}
在部分
位中有更多不同的部分@partnames
选择这些@partname
位的最佳方式是什么:
e、 g:
@data[“calcData”][“part>”][“LicenseYears”]
如何在ruby/rails中表示这种逻辑?这里有一种方法:
part = @data["calcData"]["part"]
keys = part.keys.select{|key| part["@partname"] == "ratingData"}
values = keys.collect{|key| part[key]["licenceYears"]}
您可以将其组合成一行,但它不容易阅读。使用Struct
CalcData = Struct.new :coverStarDate, :part
calc_data = CalcData[ "10/08/2011",
{ "licenceYears" => 10,
# etc.
} ]
这样,你就摆脱了顶层括号的引用,你可以说:
calc_data.part["licenceYears"]
-1您的数据不是有效的Ruby对象。您有一个额外的数组开始
[
和一个额外的散列结束}
。此外,相关的键应该是“part”
,而不是“part”
,正如您在“例如”中暗示的那样@sawa我已经在很大程度上修改了实际的散列。这些只是一个打字错误——我更感兴趣的是如何解决这个问题——我编辑了这篇文章,使其有效。
calc_data.part["licenceYears"]
query = 'driver'
@data["calcData"]['part'].select{|part| part['@partname'].eql?query}
=> [{"dob"=>"26/01/1964", "age"=>"47", "@partname"=>"driver"}]