如何对哈希表求和并计算basket中订单的总费用?
计算哈希表中订单的总费用
嘿,这个问题我帮你捋清楚哈!首先得先修正一下你给的哈希表语法,因为目前的写法在Ruby里是跑不通的。根据你的描述——每个商品的键关联数字是单价,数值代表数量,正确的哈希表结构应该是把每个商品的单价和数量配对存储,比如下面两种常见写法:
写法一:用嵌套哈希存单价和数量
basket = { "potato wedges" => { price: 4.45, quantity: 2 }, "tiramisu" => { price: 4.95, quantity: 2 }, "diet coke" => { price: 1.75, quantity: 2 } }
写法二:用数组存单价和数量
basket = { "potato wedges" => [4.45, 2], "tiramisu" => [4.95, 2], "diet coke" => [1.75, 2] }
接下来就可以用几种方法计算总费用了,核心逻辑都是遍历每个商品,算出单个商品的总价(单价×数量),再把所有总价累加:
方法一:用inject方法(Ruby里的经典累加方式)
如果是嵌套哈希结构:
total = basket.values.inject(0.0) do |sum, item| sum + (item[:price] * item[:quantity]) end puts total # 输出结果:22.3
如果是数组结构:
total = basket.values.inject(0.0) do |sum, (price, quantity)| sum + (price * quantity) end puts total # 同样输出22.3
这里把初始值设为
0.0是为了确保结果是浮点数,避免整数运算导致的精度问题。
方法二:用each循环(更直观易懂)
如果是嵌套哈希结构:
total = 0.0 basket.each do |_name, item| total += item[:price] * item[:quantity] end puts total # 输出22.3
数组结构的话只需要稍微调整循环里的取值:
total = 0.0 basket.each do |_name, (price, quantity)| total += price * quantity end puts total # 输出22.3
内容的提问来源于stack exchange,提问作者fairyduststars
相关产品推荐
相关产品推荐

