The original array is
[
{\"id\"=>2, \"idx\"=>111, \"money\"=>\"4.00\", \"money1\"=>\"1.00\", \"order\"=>\"001\", \"order1\"=>\"1\"},
{\
This should be pretty close of what you asked
def f_addition(arr, group_fields, sum_fields, max_fields)
arr.group_by do |h|
group_fields.map {|k| h[k]}
end.values.map do |group|
sums = group.each_with_object(Hash.new(0)) do |h, acc|
sum_fields.each {|sum_f| acc[sum_f] += h[sum_f].to_f }
end
group.first.merge(sums)
end.flatten
end
arr = [
{"id"=>2, "idx"=>111, "money"=>"4.00", "money1"=>"1.00", "order"=>"001", "order1"=>"1"},
{"id"=>1, "idx"=>112, "money"=>"2.00", "money1"=>"2.00", "order"=>"001", "order1"=>"1"},
{"id"=>3, "idx"=>113, "money"=>"3.00", "money1"=>"1.00", "order"=>"002", "order1"=>"2"}
]
f_addition(arr, ["order","order1"], ["money","money1"], ["id", "idx"] )
# [
# {"id"=>2, "idx"=>111, "money"=>6.0, "money1"=>3.0, "order"=>"001", "order1"=>"1"}
# {"id"=>3, "idx"=>113, "money"=>3.0, "money1"=>1.0, "order"=>"002", "order1"=>"2"}
# ]