以下のデータを同じnameごとにまとめて、dataを加算したい
[ {name: "fruits", data: [1,2,3]}, {name: "meat", data: [3,4,5]}, {name: "fruits", data: [5,6,7]} ]
求める形
[ {name: "fruits", data: [6,8,10]}, {name: "meat", data: [3,4,5]}, ]
arr = [ {name: "fruits",data: [1,2,3]}, {name: "veget",data: [3,4,5]}, {name: "fruits",data: [6,7,8]} ] category = arr.map{|a| a[:name]}.uniq reduced = category.map do |c| {name: c, data: arr .select{|a| a[:name]==c}#該当カテゴリのものを抽出 .map{|a| a[:data]} #ハッシュのdataキーのものを取り出す .transpose #くっつける .map{|a| a.inject(:+)} #足す } end p reduced #=> [{:name=>"fruits", :data=>[7, 9, 11]}, {:name=>"veget", :data=>[3, 4, 5]}]
最後の配列の足し算の部分
http://d.hatena.ne.jp/seinzumtode/20150628/1435484534