Объединение массивов хэшей в Ruby - PullRequest
4 голосов
/ 25 октября 2010

Я пытаюсь объединить несколько массивов хэшей в 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}
]

Это что-то вроде функции pv.nest для protovis в Javascript.Смотрите: http://protovis -js.googlecode.com / svn / trunk / jsdoc / symbols / pv.Nest.html

как это сделать в Ruby?

1 Ответ

9 голосов
/ 25 октября 2010

Если вы поместите все различные хэши в один массив, вы можете использовать group_by, чтобы сгруппировать их с одинаковыми country_id. Затем вы можете использовать inject с merge до merge вместе:

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}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...