elmt elmt - 1 year ago 36
Ruby Question

How to merge two hashes with no new keys

How could I merge two hashes that results in no new keys, meaning the merge would merge keys that exist in both hashes?

For example, I want the following:

h = {:foo => "bar"}
j = {:foo => "baz", :extra => "value"}

puts h.merge(j) # {:foo => "baz"}

I'm looking for a really clean way of doing this as my current implementation is pretty messy.

Answer Source

You could remove keys that weren't in the first hash from the second hash, then merge:

h.merge j.select { |k| h.keys.include? k }

Unlike my edited-out alternative, this is safe if you decide to change it to a merge! or update.