我有以下带嵌套哈希的数组:
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用于迭代我的哈希数组?如果不改变我的哈希数组的结构,有人可以帮我理解吗?
答案 0 :(得分: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
模块的更多信息。也不要懒惰并检查documentation。