Ruby 检索嵌套的哈希值
我有一个嵌套哈希,如下所示:Ruby 检索嵌套的哈希值,ruby,Ruby,我有一个嵌套哈希,如下所示: { :a=>{ :toto=>{ :foo=>10, :bar=>11, :baz=>12 }, :titi=>"a" }, :b=>{ :toto=>{ :foo=>31, :
{
:a=>{
:toto=>{
:foo=>10,
:bar=>11,
:baz=>12
},
:titi=>"a"
},
:b=>{
:toto=>{
:foo=>31,
:bar=>45,
:baz=>78
},
:titi=>"b"
}
}
我的目标是将所有的:baz
值相加。我相信在ruby中有一种很好的方法可以做到这一点。有什么想法吗
谢谢。#inject
是一种非常强大的方法,适用于数组和散列。您可以遍历散列的值,并将所需的键求和到总和
hash.inject(0) { |sum, (_,v)| sum += v[:toto][:baz] } # => 90
此方法查找所有
:baz
元素,而不考虑它们的路径
h = {
:a=>{
:toto=>{
:foo=>10,
:bar=>11,
:baz=>12,
},
:titi=>"a"
},
:b=>{
:toto=>{
:foo=>31,
:bar=>45,
:baz=>78,
},
:titi=>"b",
},
}
def sum_baz(hash)
hash.values.reduce(0) do |memo, elem|
if elem.is_a?(Hash)
memo += sum_baz(elem)
memo += elem[:baz] if elem[:baz]
end
memo
end
end
sum_baz(h) # => 90
@prashantsharma也感谢你……)
h = {
:a=>{
:toto=>{
:foo=>10,
:bar=>11,
:baz=>12,
},
:titi=>"a"
},
:b=>{
:toto=>{
:foo=>31,
:bar=>45,
:baz=>78,
},
:titi=>"b",
},
}
def sum_baz(hash)
hash.values.reduce(0) do |memo, elem|
if elem.is_a?(Hash)
memo += sum_baz(elem)
memo += elem[:baz] if elem[:baz]
end
memo
end
end
sum_baz(h) # => 90