合并散列和连接值作为数组

时间:2012-07-04 13:09:01

标签: ruby hash

我希望转换以下数据结构

series = [{:name => "foo", :data => [12, 23]}, 
          {:name => "bar", :data => [14, 22]}, 
          {:name => "foo", :data => [15, 26]}]

series = [{:name => "foo", :data => [[12, 23],[15,26]]},
 {:name => "bar", :data => [14, 22]}]

在ruby 1.8中解决这个问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

series.group_by { |h| h[:name] }.map do |name, hs_for_name| 
  {:name => name, :data => hs_for_name.map { |h| h[:data] }}
end
#=> [{:name=>"foo", :data=>[[12, 23], [15, 26]]}, 
#    {:name=>"bar", :data=>[[14, 22]]}]

答案 1 :(得分:0)

使用Enumerable#inject方法映射所有项目并根据需要减少结果。