来自类似哈希的元素的Ruby总和

问题描述 投票:1回答:1

假设我有这些记录,其中“ r_years”可以有任意数量的年份键:

Item.select('id','name','r_years').where(name:"N1")
...
"id" => 1, "name" => "N1", "r_years" => {"year2020" => "1","year2021" => "2", ...}
"id" => 2, "name" => "N1", "r_years" => {"year2020" => "2","year2021" => "3", ...}
...

如何获取每个年份键的r_years值的总和,如下所示:

@r_years_sum = {"year2020" => "3","year2021" => "5", ...}

谢谢。

ruby activerecord hash ruby-on-rails-5 ruby-2.5
1个回答
1
投票

您可以将结果映射为仅获取r_years值,然后使用reduce并合并每年的每个值并将它们的值作为整数求和:

items.map do |item|
  item['r_years']
end.reduce do |acc, item|
  item.merge(acc) { |_, oldval, newval| (oldval.to_i + newval.to_i).to_s }
end
# {"year2020"=>"3", "year2021"=>"5"}
© www.soinside.com 2019 - 2024. All rights reserved.