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

Ruby如何合并哈希数组中同ID哈希并为缺失键补默认值0?

Ruby 同ID哈希合并补默认值实现

需求

给定存储哈希的数组,处理规则如下:

  • 将数组中:ID取值相同的哈希合并为单个哈希
  • 合并后缺失的步骤类键统一填充默认值0
  • 原始输入:
array = [
  {:ID=>"aaa", :step2=>80},
  {:ID=>"aaa", :step1=>160},
  {:ID=>"aaa", :step3=>70},
  {:ID=>"bbb", :step1=>80}
]
  • 期望输出:
[
  {:ID=>"aaa", :step1 => 160, :step2 => 80, :step3 => 70},
  {:ID=>"bbb", :step1 => 80, :step2 => 0, :step3 => 0}
]

实现代码

# 收集所有非ID的字段,确定需要补全的键范围
all_step_keys = array.flat_map { |item| item.keys - [:ID] }.uniq

merged_result = array
  .group_by { |item| item[:ID] } # 按ID值分组
  .map do |id_val, group_items|
    # 先构造带默认值0的基础哈希
    default_hash = { ID: id_val }.merge(all_step_keys.to_h { |key| [key, 0] })
    # 把同组的哈希值覆盖到默认哈希上,完成合并
    group_items.inject(default_hash) { |res, item| res.merge(item) }
  end

运行后merged_result的值和期望结果完全一致。如果需要固定键的顺序,只需要提前对all_step_keys做排序处理即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:06:06