我有一些这种格式的数据
[{
"_id" => "20",
"value" => 1
}, {
"_id" => "19",
"value" => 1
}, {
"_id" => nil,
"value" => 8
}, {
"_id" => "27",
"value" => 1
}, {
"_id" => "25",
"value" => 3
}, {
"_id" => "28",
"value" => 1
}]
我想用“_id”键合并相同的值并对“value”值求和。
欲望输出
[{
"_id" => "20",
"value" => 1
}, {
"_id" => "19",
"value" => 2
}, {
"_id" => nil,
"value" => 8
}, ...]
有没有一种优雅的方法可以做到这一点?
我试过两个循环,但我认为这不是最好的方法。
最佳答案
与 Ruby 中的大多数事情一样,前往 Enumerable
文档出现了 group_by
可以帮助按照一些任意标准将事物组合在一起的方法。将它与计算总和的东西结合起来,你会得到这个:
v.group_by do |e|
e['_id']
end.map do |id, list|
{
'_id' => id,
'value' => list.inject(0) { |sum, e| sum + e['value'] }
}
end
# => [{"_id"=>"20", "value"=>1}, {"_id"=>"19", "value"=>2}, {"_id"=>nil, "value"=>28},
# {"_id"=>"27", "value"=>1}, {"_id"=>"25", "value"=>3}, {"_id"=>"28", "value"=>1},
# {"_id"=>"23", "value"=>1}, {"_id"=>"16", "value"=>1}, {"_id"=>"18", "value"=>2},
# {"_id"=>"22", "value"=>2}]
关于ruby-on-rails - 合并 Ruby 中的哈希数组并计算相同的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40051767/