如何访问数组中嵌套哈希中的两个元素?

时间:2017-09-28 04:29:07

标签: ruby ruby-hash

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

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

如果想验证我可以获得" buffalo chicken"披萨配两个浇头。我使用.map方法迭代哈希数组来验证" flavor"我想和"额外"我想要(2个浇头)可用。答对了!我使用的代码工作,返回true,实际上这两个元素是可用的。但是,如果我想检查一下" buffalo chicken"味道是可用的,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

我试图找出为什么我得到[]而不是假。也许有一些我不理解的方式.map用于迭代我的哈希数组?如果不改变我的哈希数组的结构,有人可以帮我理解吗?

1 个答案:

答案 0 :(得分:2)

这里有几个问题:

  • 哈希中的键必须是唯一的,因此会忽略两个第一个toppings键。以下是错误哈希{ key: 1, key: 2, key: 3 }变为{ key: 3 }的示例。
  • 在任何情况下,it's a method都不得将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模块的更多信息。也不要懒惰并检查documentation