如何在ruby中合并具有相同键的两个哈希

如何在ruby中合并具有相同键的两个哈希,ruby,hash,Ruby,Hash,我有两个散列,应该有相同的键,如: a = {a: 1, b: 2, c: 3} b = {a: 2, b: 3, c: 4} 我想把每个值加起来如下: if a.keys == b.keys a.values.zip(b.values).map{|a, b| a+b} end 但是,如果键的顺序不同,例如b={a:2,c:4,b:3},则此代码不起作用 如何在编写代码时考虑键的顺序?使用或: 使用键、旧值和新值调用该块。块的返回值用作一个新值。如果您使用的是活动支持(Rails),它添

我有两个散列,应该有相同的键,如:

a = {a: 1, b: 2, c: 3}
b = {a: 2, b: 3, c: 4}
我想把每个值加起来如下:

if a.keys == b.keys
  a.values.zip(b.values).map{|a, b| a+b}
end
但是,如果键的顺序不同,例如
b={a:2,c:4,b:3}
,则此代码不起作用

如何在编写代码时考虑键的顺序?

使用或:


使用键、旧值和新值调用该块。块的返回值用作一个新值。

如果您使用的是活动支持(Rails),它添加了
Hash\transform\u值
,当您使用
n
哈希时,我非常喜欢这个易于阅读的解决方案:

hash=[hash_1,hash_2,hash_3]#任意数量的hash
hashes.flat_map(&:to_a).group_by(&:first).transform_值{| x | x.sum(&:last)}

我喜欢与块合并。如果有机会,我会使用它。出现以下错误:[!]对于#@HenningHall未定义的方法“+”,似乎您使用的是旧版本的ruby,其中不存在
Hash#merge
。不确定,因为哪个版本是可用的,但根据文档,我的情况下,如何做,请帮助我,如果有人知道。1) a={“附加选项”=>{“禁食”=>100.0,“午餐”=>300.0},“折扣”=>{},“优惠券”=>{“cou”=>10}}}2)b={“附加选项”=>{“禁食”=>100.0},“折扣”=>{},“优惠券”=>{“cou”=>10.0}我的期望是这样的=>{>“附加选项”=>{“快攻”=>200.0,“午餐”=>300.0},“折扣”=>{},“优惠券”=>{“cou”=>10.0}@giridharan,请发布一个单独的问题。
a = {a: 1, b: 2, c: 3}
b = {a: 2, c: 4, b: 3}
a.merge!(b) { |k, o, n| o + n }
a # => {:a=>3, :b=>5, :c=>7}