How to merge two hashes that have same keys in rub

2019-04-20 00:00发布

问题:

I have a two hashes that should have same keys like:

a = {a: 1, b: 2, c: 3}
b = {a: 2, b: 3, c: 4}

And I want to sum up each values like this:

if a.keys == b.keys
  a.values.zip(b.values).map{|a, b| a+b}
end

But this code doesn't work if the order of keys are different like b = {a: 2, c: 4, b: 3}.

How can I write the code taking into account about order of keys?

回答1:

Use Hash#merge or Hash#merge!:

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}

The block is called with key, old value, new value. And the return value of the block is used as a new value.



标签: ruby hash