-2

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

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 用于迭代我的哈希数组的方式?在不改变我的哈希数组的结构的情况下,有人可以帮我理解吗?

4

1 回答 1

2

你在这里有几个问题:

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

要在哈希数组中查找元素,可以使用该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模块的更多信息。也不要偷懒并检查文档

于 2017-09-28T04:43:43.987 回答