Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 938
elmt Avatar asked Jan 28 '11 05:01

elmt


People also ask

How do you add two hashes together?

We can merge two hashes using the merge() method. When using the merge() method: Each new entry is added to the end. Each duplicate-key entry's value overwrites the previous value.

How do you merge hashes in Ruby?

Hash#merge!() is a Hash class method which can add the content the given hash array to the other. Entries with duplicate keys are overwritten with the values from each other_hash successively if no block is given.


1 Answers

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.

like image 185
Paige Ruten Avatar answered Oct 11 '22 23:10

Paige Ruten