You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并Ruby数组中同日期哈希并求和容量相关字段?

嘿,这个需求用Ruby自带的Enumerable模块方法就能轻松搞定,我来给你拆解下思路和具体实现:

解决思路与代码实现

核心逻辑

我们可以先把数组按date字段分组,再对每个分组里的哈希做合并处理——把capacity和used_capacity的值分别累加,其他字段(如果有且同日期值一致的话)直接保留即可。

分步实现

1. 按日期分组

用group_by方法把原始数组中date相同的哈希归为一组,键就是日期值,值是对应日期的哈希数组:

grouped_hashes = original_array.group_by { |item| item[:date] }

2. 遍历分组合并数据

对每个分组进行处理:取日期作为基础字段,然后用sum方法计算该组内所有哈希的capacity和used_capacity总和,最后组合成新的哈希:

merged_array = grouped_hashes.map do |date, hashes|
  {
    date: date,
    capacity: hashes.sum { |h| h[:capacity] },
    used_capacity: hashes.sum { |h| h[:used_capacity] }
  }
end

完整示例代码

假设你的原始数组是这样的:

original_array = [
  { date: "2024-05-01", capacity: 100, used_capacity: 30 },
  { date: "2024-05-01", capacity: 50, used_capacity: 20 },
  { date: "2024-05-02", capacity: 150, used_capacity: 70 },
  { date: "2024-05-03", capacity: 80, used_capacity: 40 }
]

把两步结合起来运行:

original_array = [
  { date: "2024-05-01", capacity: 100, used_capacity: 30 },
  { date: "2024-05-01", capacity: 50, used_capacity: 20 },
  { date: "2024-05-02", capacity: 150, used_capacity: 70 },
  { date: "2024-05-03", capacity: 80, used_capacity: 40 }
]

merged_array = original_array.group_by { |item| item[:date] }.map do |date, hashes|
  {
    date: date,
    capacity: hashes.sum { |h| h[:capacity] },
    used_capacity: hashes.sum { |h| h[:used_capacity] }
  }
end

puts merged_array.inspect
# 输出结果:
# [{:date=>"2024-05-01", :capacity=>150, :used_capacity=>50}, {:date=>"2024-05-02", :capacity=>150, :used_capacity=>70}, {:date=>"2024-05-03", :capacity=>80, :used_capacity=>40}]

额外补充

如果你的哈希里还有其他需要保留的字段(比如site_name,且同日期的该字段值完全一致),可以直接从分组的第一个哈希里取:

merged_array = original_array.group_by { |item| item[:date] }.map do |date, hashes|
  first_item = hashes.first
  {
    date: date,
    site_name: first_item[:site_name], # 保留额外字段
    capacity: hashes.sum { |h| h[:capacity] },
    used_capacity: hashes.sum { |h| h[:used_capacity] }
  }
end

这样处理后就能得到你想要的合并数组啦~

内容的提问来源于stack exchange,提问作者Reinier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:02:16