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)