ruby-on-rails - 合并 Ruby 中的哈希数组并计算相同的键

标签 ruby-on-rails ruby

我有一些这种格式的数据

[{
    "_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/

相关文章:

ruby - 与 EventMachine 一起 sleep

ruby - 如何创建临时文件并在一定时间后将其删除

ruby - Elasticsearch 轮胎 : How to bulk remove?

ruby-on-rails - Heroku、Twitter api 上的 Rails 未初始化常量错误,在本地工作正常

ruby-on-rails - 删除模型和表,以便可以在 Rails 中重新开始

ruby-on-rails - 如何在Rails 4应用程序中禁用IP欺骗检查?

ruby-on-rails - 如何从任何文件夹查看 Rails 中的文件列表,外部 Rails.root - Windows

ruby-on-rails - 为什么 rails_admin 路由只适用于 link_to 而不是 'render'

ruby - 如何让 Sinatra 与 HTTPClient 一起工作?

python - Python 的 Rstudio 服务器等效项