如何获取三个哈希值并将它们连接成一个哈希值,以便在键是常见的情况下,它会添加值,如果键是唯一的,它只是将键/值对添加到最终值加入哈希?像这样:
r1 = { "Flour" => 500, "Cheese" => 1500, "Tomato Sauce" => 700 }
r2 = { "Bread" => 300, "Cheese" => 600, "Butter" => 450 }
r3 = { "Cheese" => 900, "Tortillas" => 250, "Flour" => 350 }
我尝试了.merge
,但似乎并没有添加公共密钥的值......至少我没有阻止这样做的方式。我也试过这个:
this
所以,也许它可以用一个块???它是如何将三个哈希合并为一个,添加重叠的哈希,以这样的结尾:
r_total = { "Flour" => 850, "Cheese" => 3000, "Tomato Sauce" => 700,
"Bread" => 300, "Butter" => 450, "Tortillas" => 250 }
答案 0 :(得分:2)
您可以使用reduce
+ merge
:
[r1, r2, r3].reduce({}){ |memo, obj| memo.merge(obj) { |key, old, new| old + new } }
答案 1 :(得分:1)
您可以使用默认值0初始化哈希,然后遍历每个元素并将值相加。
r_total = Hash.new(0)
[r1, r2, r3].each do |hash|
hash.each do |k, v|
r_total[k] += v
end
end
r_total