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

Ruby中仅合并两个哈希共有键并对值运算的实现问题

Ruby 哈希合并:仅保留共有键并对值运算

需求:仅合并两个哈希中同时存在的键,对对应值执行相加或相乘操作。

示例哈希:

hash1 = {"a" => 1, "b" => 2, "c" => 3 }
hash2 = {"a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5}

期望结果(相加操作):

{"a" => 2, "b" => 4, "c" => 6 }

当前问题:使用 hash1.merge(hash2) { |key1, value1, value2| value1 + value2 } 时,虽能正确相加共有键的值,但会保留非共有键d和e,不符合需求。


解决方法

方法1:先取键的交集,再构建结果哈希

先获取两个哈希的共有键集合,再遍历这些键对值进行运算,最终生成目标哈希:

相加操作

common_keys = hash1.keys & hash2.keys
result = common_keys.each_with_object({}) do |key, new_hash|
  new_hash[key] = hash1[key] + hash2[key]
end
# 输出:{"a"=>2, "b"=>4, "c"=>6}

相乘操作

只需将运算逻辑替换为乘法即可:

common_keys = hash1.keys & hash2.keys
result = common_keys.each_with_object({}) do |key, new_hash|
  new_hash[key] = hash1[key] * hash2[key]
end
# 输出:{"a"=>1, "b"=>4, "c"=>9}

方法2:合并后筛选共有键

先执行merge完成值的运算,再通过select筛选出仅在两个哈希中都存在的键:

相加操作

result = hash1.merge(hash2) { |k, v1, v2| v1 + v2 }.select { |k| hash1.key?(k) && hash2.key?(k) }
# 输出:{"a"=>2, "b"=>4, "c"=>6}

这种方式代码更简洁,适合哈希数据量较小的场景;若哈希规模较大,方法1的性能会更优,因为避免了对非共有键的无效运算。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:15:39