Hash#collate
# From: http://www.ruby-forum.com/topic/135807 # Author: Nobuyoshi Nakada class Hash def collate(h) raise ArgumentError unless h.is_a?(Hash) update(h) { |key, *values| values } #update(h) { |key, *values| values.flatten.uniq } end end h1 = {:a=>1, :b=>2 } h2 = {:a=>3, :b=>4, :c=>5} h1.collate(h2) p h1, h2 #=> {:b=>[2, 4], :a=>[1, 3], :c=>5} #=> {:b=>4, :a=>3, :c=>5} puts h1 = {:a=>1, :b=>2 } h2 = {:a=>3, :b=>4, :c=>5} h2.collate(h1) p h1, h2 #=> {:b=>2, :a=>1} #=> {:b=>[4, 2], :a=>[3, 1], :c=>5}