2010-10-24 5 views
4

J'essaie de joindre plusieurs tableaux de hachage en ruby ​​en utilisant une clé commune. Par exemple:Joindre des tableaux de hachage dans Ruby

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} 
] 

Cela ressemble à la fonction pv.nest de protovis en Javascript. Voir: http://protovis-js.googlecode.com/svn/trunk/jsdoc/symbols/pv.Nest.html

comment puis-je faire cela dans Ruby?

+0

La vraie question est de savoir pourquoi vous avez plusieurs tableaux de hash? Une conception globale simplifiée peut être en ordre. –

Répondre

9

Si vous mettez tous les différents hachages dans un tableau, vous pouvez utiliser group_by pour regrouper ceux ayant le même country_id. Vous pouvez ensuite utiliser inject avec merge pour merge les ensemble:

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}] 
+0

Yup. Ça a marché. THX. – miguelrios

+1

A eu un problème similaire grande réponse et explication! – Gotjosh

Questions connexes