From: Stefan Rusterholz Date: 2009-04-20T20:33:14+09:00 Subject: Re: Hash merge question A little bit simpler: result = {} (h1.keys | h2.keys).each { |key| result[key] = [(h1[key] || []), (h2[key] || []) } No need to abuse inject. Regards Stefan Florian Kaufmann wrote: > #!/usr/bin/ruby > h1 = { > :a1 => [:y1, :y2, :y3], > :a2 => [:y4, :y5, :y6] > } > h2 = { > :a2 => [:z1, :z2, :z3], > :a3 => [:z4, :z5, :z6] > } > h = {} > (h1.keys + h2.keys).each {|k| h[k] = [[],[]] } > h = h1.to_a.inject(h) { |i,kv| i[kv[0]][0] = kv[1]; i } > h = h2.to_a.inject(h) { |i,kv| i[kv[0]][1] = kv[1]; i } > p h > > gives > > {:a2=>[[:y4, :y5, :y6], [:z1, :z2, :z3]], :a1=>[[:y1, :y2, :y3], > []], :a3=>[[], [:z4, :z5, :z6]]} -- Posted via http://www.ruby-forum.com/.