【问题标题】:How to access two elements within nested hashes within an array?如何访问数组内嵌套哈希中的两个元素?
【发布时间】:2017-09-28 04:29:07
【问题描述】:

我有以下带有嵌套哈希的数组:

pizza = [
         { flavor: "cheese", extras: { topping1: 1, topping2: 2, topping3: 3} },
         { flavor: "buffalo chicken", extras: { topping1: 1, topping2: 2, topping3: 3} } } ]

如果想验证我是否可以订购带有两种配料的“水牛鸡”披萨。我使用.map 方法遍历哈希数组以验证我想要的“风味”和我想要的“额外”(2 个浇头)是否可用。答对了!我使用的代码有效,返回 true,而且这两个元素确实可用。但是,如果我想检查“水牛鸡”风味是否可用并且是否还有 5 种浇头可用,那么它应该返回 false,但相反,我收到一条错误消息:

Failure Error: expect(Party).not_to be_available(pizza, "buffalo chicken", :toppings5) to return false, got []

这是我的代码:

 def self.available?(pizza, flavor, extra)
      pizza.map { |x| x if x[:flavor] == flavor && x[:extra] == extra }
end

我试图弄清楚为什么我会返回 [] 而不是 false。也许我不理解 .map 被用来遍历我的哈希数组的方式?在不改变我的哈希数组结构的情况下,有人可以帮我理解吗?

【问题讨论】:

  • “我收到一条错误消息” – 不幸的是,您没有告诉我们错误消息的内容,所以我们能做的最好的事情就是告诉您阅读错误消息并修复错误。
  • "[...] 两种配料的比萨饼" – 这是否意味着至少两种配料,还是您正在寻找两种特定的配料?
  • 两个浇头,所以我正在寻找“topping2”返回true。
  • 如果我在“水牛鸡”披萨上寻找“topping5”(用于 5 种配料),它应该返回 false,因为它不是“附加”下的选项
  • 不要在哈希键名中放入序列(topping1topping2),最好使用数组(toppings: [1, 2]

标签: ruby ruby-hash


【解决方案1】:

这里有几个问题:

  • 散列中的键必须是唯一的,因此前两个toppings 键被忽略。这是一个错误的哈希示例 { key: 1, key: 2, key: 3 } 它变成了{ key: 3 }
  • 在任何情况下都不能使用hash 作为变量的名称it's a method

要在哈希数组中查找元素,可以使用find 方法,例如:

>> h = [{ f: "cheese", extras: [1,2,3] }, { f: "buffalo", extras: [1,3] }] 
>> h.find { |h| h[:f] == "cheese" && h[:extras].size > 2 }
=> {:f=>"cheese", :extras=>[1, 2, 3]}

有很多方法可以遍历数组或散列。阅读有关Enumerable 模块的更多信息。也不要偷懒,检查documentation

【讨论】:

  • 谢谢,我刚刚尝试使用查找和包含?方法,但我收到以下错误消息: NoMethodError: undefined method `include?'对于 nil:NilClass
  • @user8687088 请记住,我不是你的调试工具。如果你有错误,你必须做一些研究并理解问题。
  • 我尝试查找可能收到此错误消息的各种原因,或者我无法使用 .include?或者(2)是问题所在。我以前用 .any 使用过这个消息?没有问题,但我似乎无法让它与 .find 一起使用,我不知道为什么。
  • @user8687088 显示您正在使用的完整代码。完全满。
  • pizza.find { |h| h[:flavor] == "水牛鸡" && h[:extras].include?(topping2) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 2020-07-07
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多