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
相关产品推荐
相关产品推荐

