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

Ruby中合并多维哈希并对重复键值求和的实现问询

Ruby多维哈希合并并对count值求和的实现思路

普通的Hash#merge带块只能处理单层哈希的冲突,嵌套的哈希会直接被覆盖,所以要实现多维哈希的合并并对:count值求和,需要递归处理每一层哈希。

实现步骤:

  1. 编写递归合并方法,判断每个键对应的值类型:

    • 如果两个值都是哈希,就递归调用合并方法处理嵌套层级
    • 如果键是:count,则将两个数值相加
    • 其他非:count的冲突键(如果有),可根据需求选择保留后者或其他逻辑
  2. 使用Enumerable#inject将所有迭代得到的哈希依次合并,初始值设为空哈希。

代码示例:

def deep_merge_sum(hash1, hash2)
  hash1.merge(hash2) do |key, val1, val2|
    if val1.is_a?(Hash) && val2.is_a?(Hash)
      deep_merge_sum(val1, val2)
    elsif key == :count
      val1 + val2
    else
      # 非count键冲突时默认保留后者,可根据需求调整
      val2
    end
  end
end

# 你的迭代哈希集合
hashes = [
  { a: { count: 1, b: { count: 2 } } },
  { a: { count: 3, b: { count: 5, c: { count: 7 } } } },
  { a: { count: 3, b: { count: 2 } } }
]

# 合并所有哈希
result = hashes.inject({}, &method(:deep_merge_sum))
p result
# 输出结果:{:a=>{:count=>7, :b=>{:count=>9, :c=>{:count=>7}}}}

原理说明:

  • 递归方法会逐层遍历哈希的嵌套结构,确保每一层的:count值都被正确求和
  • inject方法从空哈希开始,依次将每个迭代哈希合并到结果中,最终得到所有层级求和后的完整哈希

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:10