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

Ruby中基于Hash与Array实现自定义卡路里统计方法的问题

修正卡路里求和方法的实现

你的calories_counter方法存在两个关键问题:

  1. 错误地给数组元素拼接了冒号:哈希的key是纯字符串(比如"Hamburger"),:#{element}会生成类似":Hamburger"的字符串,和哈希中的key完全不匹配,导致取值为nil,相加时会触发错误。
  2. 方法没有返回求和结果:Ruby方法默认返回最后一行代码的执行结果,原代码最后一行是each循环,会返回原数组而非计算出的总和。

基础修正版本

def calories_counter(orders)
  sum = 0
  orders.each { |element| sum += DISHES_CALORIES[element] }
  sum
end

更简洁的Ruby风格实现

Ruby提供了更优雅的求和方式,直接用sum方法处理:

def calories_counter(orders)
  orders.sum { |item| DISHES_CALORIES[item] }
end

或者用inject(和reduce是同一方法):

def calories_counter(orders)
  orders.inject(0) { |total, item| total + DISHES_CALORIES[item] }
end

处理不存在的菜品(可选)

如果传入的数组包含哈希中没有的key,上面的写法会报错。可以给不存在的菜品默认加0,避免错误:

def calories_counter(orders)
  orders.sum { |item| DISHES_CALORIES[item] || 0 }
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:02:25