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

Ruby编程:如何将哈希值数组转为平均值?能否不新建哈希?

当然有更优雅的实现方式啦!Ruby本身就提供了很方便的方法来处理这种哈希值转换的场景,分两种情况给你说明:

更优的实现方案

1. 原地修改原哈希(完全无需创建新哈希)

如果你希望直接修改原哈希hash_1,不需要额外创建hash_2,可以用Ruby的transform_values!方法(Ruby 2.4及以上版本支持),这是专门为哈希值批量原地更新设计的API,代码超简洁:

hash_1 = {"Luke"=> [2,3,4], "Mark"=>[3,5], "Jack"=>[2]}
hash_1.transform_values! { |values| values.sum / values.count }
# 此时hash_1已经变成目标结果:{"Luke"=>3, "Mark"=>4, "Jack"=>2}

如果你的Ruby版本比较旧,也可以用each直接原地更新,虽然代码稍长但同样不需要新哈希:

hash_1.each do |key, values|
  hash_1[key] = values.sum / values.count
end

2. 生成新哈希(不改动原哈希)

如果你不想修改原哈希,想要得到一个全新的结果哈希,可以用不带感叹号的transform_values方法,它会返回转换后的新哈希,原哈希保持不变:

hash_1 = {"Luke"=> [2,3,4], "Mark"=>[3,5], "Jack"=>[2]}
result_hash = hash_1.transform_values { |values| values.sum / values.count }
# result_hash是目标结果,hash_1依然是初始状态

小补充

如果需要浮点数类型的平均值(比如数组是[1,2]时得到1.5而不是1),只需要把求和结果转成浮点数即可:

hash_1.transform_values! { |values| values.sum.to_f / values.count }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:18:10