【问题标题】:Rubymonk - Iterating over a hashRubymonk - 遍历哈希
【发布时间】:2016-04-12 09:08:59
【问题描述】:

Ruby Monk(第 4.1 节 - 哈希)有一个关于餐厅的练习,并将价格提高 10%。网站上的路线是:

使用 each 方法将 restaurant_menu 中所有项目的价格提高 10%。

请记住:在前面的示例中,我们只显示了散列中每个项目的键和值。但是在这个练习中,你必须修改哈希并增加每一项的值。

我的主要问题是,为什么这段代码会通过:

restaurant_menu = { "Ramen" => 3, "Dal Makhani" => 4, "Coffee" => 2 }
restaurant_menu.each do |item, price|
  restaurant_menu[item] = price + (price * 0.1)
end

对比这个?

restaurant_menu = { "Ramen" => 3, "Dal Makhani" => 4, "Coffee" => 2 }
# write the each loop here. 
restaurant_menu.each do | item, price |
  puts "#{item}: $#{price + (price * 0.1)}" 
end

我假设它与 [item] 有关,我假设它是一个数组(?),并且“price + (price * 0.1)”被添加到 [item] 数组中。

其次,字符串插值是否有可能使上述代码不通过。 . .提前感谢您帮助我更好地理解此代码。

【问题讨论】:

  • 在第二种情况下,您只是打印值,但不会更改实际的哈希值。我假设他们正在检查哈希中的值。
  • 在第二个示例中,您只是在屏幕上打印 - 第一个示例,您实际上是在更改 restaurant_menu 哈希的值。
  • 在两个脚本末尾添加p restaurant_menu 以查看差异。

标签: ruby hash iteration each


【解决方案1】:

当你执行这个时:

restaurant_menu[item] = price + (price * 0.1)

您正在将新价格分配给哈希键(它将存储新值 - 您可以通过调用 restaurant_menu[item] 来检查它)。

当你执行这个时:

 puts "#{item}: $#{price + (price * 0.1)}"

您正在将新价格分配给任何地方(当您致电 restaurant_menu[item] 时将保持不变)。

因此您不会更改哈希值,代码也不会通过验证。

【讨论】:

  • 谢谢!出于某种原因,我没有得到练习只是想让我替换散列的值。
猜你喜欢
  • 2014-06-01
  • 2013-11-25
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 2013-01-16
相关资源
最近更新 更多