Ruby 在下面的教程中,如何使用具有相同键的哈希来关联菜单项和订单项价格?
我正在研究“订单和成本”问题。问题陈述是: 餐厅有进货订单,您需要计算订单数量 费用根据菜单而定 您可能一次收到多个订单 练习下面有一个解决方案(请参见解决方案),如下所示:Ruby 在下面的教程中,如何使用具有相同键的哈希来关联菜单项和订单项价格?,ruby,hash,Ruby,Hash,我正在研究“订单和成本”问题。问题陈述是: 餐厅有进货订单,您需要计算订单数量 费用根据菜单而定 您可能一次收到多个订单 练习下面有一个解决方案(请参见解决方案),如下所示: class Restaurant def initialize(menu) @menu = menu end def cost(*orders) orders.inject(0) do |total_cost, order| total_cost + order.keys.inje
class Restaurant
def initialize(menu)
@menu = menu
end
def cost(*orders)
orders.inject(0) do |total_cost, order|
total_cost + order.keys.inject(0) {|cost, key| cost + @menu[key]*order[key] }
end
end
end
我不了解整个算法:我想是这样的-在def cost(*orders)
总成本是订单成本<代码>键
是项目,在这种情况下:米饭和面条,但@menu[key]*order[key]
的含义是什么,我猜不出来
谁能给我解释一下这个练习吗
@menu = {'rice' => 3.00, 'beans' => 2.50}
order = {'rice' => 1, 'beans' => 2)
所以
因此,总订单为8.00
key
只是传递到每个哈希查找中的密钥。两个哈希值order
和@menu
都使用rice
键,一个将rice
与其在菜单上的价格关联,另一个将其与订单中rice
项目的数量关联。正如练习告诉您的,订单是{:rice=>1、:面条=>1}和{:rice=>2、:面条=>2},菜单是{:米饭=>3,:面条=>2}
@menu[key]*order[key]
只需将每个带有给定键的@menu与具有相同键的顺序相乘即可
@菜单[:rice]*订购[:rice]因此第一份订单(:rice)
面条也一样
@menu[:noodles] # => 2 multiplied with 3 (once from the first order, twice from the second)
结果:米饭为9,面条为6=>总成本=15+
@menu[:rice] # => 3 multiplied with 3 (once from the first order, twice from the second)
@menu[:noodles] # => 2 multiplied with 3 (once from the first order, twice from the second)