按给定键分组哈希值并累加值

时间:2012-10-22 11:23:29

标签: ruby

来源(已正确订购):

rows = [{"key"=>[2012, 10]}, {"key"=>[2012, 9]}, {"key"=>[2011, 7]}]

期望的结果:

[[2012, [10, 9]], [2011, [7]]]

2 个答案:

答案 0 :(得分:2)

由于数据已预先订购,我们可以使用chunk代替group_by

rows.chunk { |h| h.values.first[0] }.map do |year, hs| 
  [year, hs.map { |h| h.values.first[1] }]
end
#=> [[2012, [10, 9]], [2011, [7]]]

答案 1 :(得分:1)

rows.map {|row| row.values.flatten}.inject({}) {|h,r| h[r[0]].nil? ? h[r[0]] = [r[1]] : h[r[0]] << r[1];h }.to_a
# [[2012, [10, 9]], [2011, [7]]]

rows.map {|row| row.values.flatten}.inject({}) {|h,r| h[r[0]] ||= []; h[r[0]] << r[1];h }.to_a
# [[2012, [10, 9]], [2011, [7]]]