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

Ruby中是否有方法将对象的所有属性值相加?

Ruby中实现哈希键值对应相加的高效方式

如果要实现两个哈希按相同键的值相加,用Hash#merge配合块是最直接的高效方案——内置方法是底层优化过的,比手动循环更省性能:

hash1 = {:a => 1, :b => 2}
hash2 = {:a => 2, :b => 1}
merged_hash = hash1.merge(hash2) { |key, val1, val2| val1 + val2 }
# 结果: {:a=>3, :b=>3}

如果是处理数组中的多个哈希,用inject(或reduce)结合merge,只需要遍历数组一次,每次合并两个哈希:

hash_array = [{:a => 1, :b => 2}, {:a => 2, :b => 1}, {:a => 3, :b => 4}]
total_hash = hash_array.inject({}) do |accumulator, current_hash|
  accumulator.merge(current_hash) { |k, v1, v2| v1 + v2 }
end
# 结果: {:a=>6, :b=>7}

如果所有哈希的键完全一致,还可以换一种思路:先提取键集合,再对每个键在所有哈希中求和,这种方式也只需要两次遍历(一次取键,一次遍历数组求和):

keys = hash_array.first.keys
total_hash = keys.each_with_object({}) do |key, acc|
  acc[key] = hash_array.sum { |h| h[key] || 0 } # 加||0处理缺失键的情况
end

不用纠结“多次迭代”的问题,Ruby内置方法的迭代是C层级实现的,比自己写Ruby循环的性能高很多,实际运行效率会比手动遍历每个键好不少。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:40:19