2011-12-14 9 views
0

I有しハッシュの次の配列によってによってアレイ、グループのハッシュ和:ルビー - 列名

[{ "IDX" => "1234"、 "アカウント" => "ABDE "、" money "=>" 4.00 "、 " order "=>" 00001 "}、{" idx "=>" 1235 "、" account "=>" abde "、" money "=>" 2.00 " "order" => "00001"}、{"idx" = "1235"、 "account" => "abde"、 "money" => "3.00"、 "order" => "00002"}]

sqlのやり方と同様に、私はそのハッシュの配列を順序番号でグループ化し、order 00001がgrのようになるようにしたいと思いますoupedと、それは6.00にお金を合計:

[{ "IDX" => "1234"、 "アカウント" => "ABDE"、 "お金" => "6.00"、 "オーダー" => "00001"}、{ "IDX" => "1234"、 "アカウント" => "ABDE"、 "お金" => "3.00"、 "順序" => "00002"}]

ありがとう。ハッシュの例のあなたの配列を返すに

def group_hashes arr, group_field, sum_field 
    arr.inject({}) do |res, h| 
    (res[h[group_field]] ||= {}).merge!(h) do |key, oldval, newval| 
     key.eql?(sum_field) ? (oldval.to_f + newval.to_f).to_s : oldval 
    end 
    res 
    end.values 
end 

コールgroup_hashes arr, "order", "money"

答えて

3

あなたが何かのように、そのための独自の方法を作ることができ

[{"idx"=>"1234", "account"=>"abde", "money"=>"6.0", "order"=>"00001"}, {"idx"=>"1235", "account"=>"abde", "money"=>"3.00", "order"=>"00002"}] 
+0

すごいです!ありがとうございました。 – oprogfrogo