Combining hash arrays in Ruby

I am trying to combine multiple arrays of hashes in a ruby ​​using a shared key. For instance:

country_info = [ {country_id: "US", country_desc: "United States"}, {country_id: "AU", country_desc: "Australia"} ] country_stats = [ {country_id:"US", pageviews: 150}, {country_id:"AU", pageviews: 200} ] i_want = [ {country_id: "US", country_desc: "United States", pageviews:150}, {country_id: "AU", country_desc: "Australia", pageviews:200} ] 

This is something like the pv.nest protovis function in Javascript. See: http://protovis-js.googlecode.com/svn/trunk/jsdoc/symbols/pv.Nest.html

How can I do this in Ruby?

+4
source share
1 answer

If you put all the different hashes in one array, you can use group_by to group together with the same country_id . Then you can use inject with merge to merge together:

 country_info_and_stats = country_info + country_stats country_info_and_stats.group_by {|x| x[:country_id]}.map do |k,v| v.inject(:merge) end #=> [{:country_id=>"US", :country_desc=>"United States", :pageviews=>150}, # {:country_id=>"AU", :country_desc=>"Australia", :pageviews=>200}] 
+9
source

All Articles