Usnig Enumerable#group_by http://www.ruby-doc.org/core/Enumerable.html#method-i-group_by,您可以迭代按以下分组的哈希数组order
, order1
key.
然后合并哈希值(通过求和money
, money1
条目):
a = [
{"idx"=>"1234", "account"=>"abde", "money"=>"4.00", "money1"=>"1.00", "order"=>"00001", "order1"=>"1"},
{"idx"=>"1235", "account"=>"abde", "money"=>"2.00", "money1"=>"1.00", "order"=>"00001", "order1"=>"1"},
{"idx"=>"1235", "account"=>"abde", "money"=>"3.00", "money1"=>"1.00", "order"=>"00002", "order1"=>"2"}
]
a.group_by { |x| x.values_at('order', 'order1') }.map {|key, hashes|
result = hashes[0].clone
['money', 'money1'].each { |key|
result[key] = hashes.inject(0) { |s, x| s + x[key].to_f }
}
result
}
# => [{"idx"=>"1234", "account"=>"abde", "money"=>6.0, "money1"=>2.0, "order"=>"00001", "order1"=>"1"},
# {"idx"=>"1235", "account"=>"abde", "money"=>3.0, "money1"=>1.0, "order"=>"00002", "order1"=>"2"}]
group_keys = ['order', 'order1']
sum_keys = ['money', 'money1']
a.group_by { |x| x.values_at(*group_keys) }.map {|key, hashes|
result = hashes[0].clone
sum_keys.each { |key|
result[key] = hashes.inject(0) { |s, x| s + x[key].to_f }
}
result
}