Ruby对相似hash键值求和 优化三重循环实现同品牌车辆总价统计
优化实现方案
你原来的三层循环时间复杂度为O(n²),品牌数量越多性能损耗越明显,我们可以用Ruby内置的迭代方法实现性能、可读性、简洁性都更高的版本:
# 单次遍历统计所有品牌的总价值,默认初始值为0 make_total = cars.each_with_object(Hash.new(0)) do |car, result| result[car[:make]] += car[:value] end # 转换为你要求的「单键哈希存入数组」的格式 values_array = make_total.map { |make, sum| { make => sum } } p values_array # 输出结果和你原代码完全一致:[{"Nissan"=>15000}, {"Toyota"=>6500}, {"Honda"=>12400}]
方案优势
- 只需要遍历1次cars数组,时间复杂度为O(n),哪怕有上百个品牌也能保持极高的执行效率
- 代码精简无重复逻辑,完全符合DRY原则,语义清晰,新手也能快速读懂逻辑
- 无任何硬编码配置,新增、减少品牌都不需要修改代码逻辑
额外建议
你后续如果需要频繁按品牌查询总价值,直接用中间生成的make_total哈希查询即可,比如查询本田的总价值只需要写make_total["Honda"],比遍历数组查询效率高很多。
内容的提问来源于stack exchange,提问作者codian
相关产品推荐
相关产品推荐

