我写了以下内容:
Tab = [{"quiche"=>{"pepper"=>"10gr","cheeze"=>"50gr"}},{"pizza"=>{"tomato"=>"80gr","cheese"=>"100gr"}}]
是两个哈希的数组,每个哈希都包含一个哈希值。我想知道数组中是否有pizza
个配方。我发现的唯一一件事就是这样做:
Tab.each {|meal| meal.each{|key,val| puts key}}
quiche
pizza
然后我可以进行测试,以确定密钥是否是我正在寻找的值。但我很确定这是一种肮脏的方式。
我尝试应用某些方法,例如:Tab.include?("pizza")
,但每次都返回false
,因为它正在查看Tab
内的两个元素:
{"quiche"=>{"pepper"=>"10gr", "cheeze"=>"50gr"}}
{"pizza"=>{"tomato"=>"80gr", "cheese"=>"100gr"}}
且{"quiche"=>{"pepper"=>"10gr", "cheeze"=>"50gr"}}
不是"quiche"
。请帮助我的人。我找不到任何解决方案。
答案 0 :(得分:5)
在ruby文档中,这个问题的非常有用的东西列在Enumerable类中。根据您想要找到它的严格程度,您有几个选择,但
Tab.any?{|recipe| recipe.keys.include?("pizza")}
应该有效。
答案 1 :(得分:2)
您可以查看方法 - Hash#assoc
或Hash#has_key?
Tab = [{"quiche"=>{"pepper"=>"10gr","cheeze"=>"50gr"}},{"pizza"=>{"tomato"=>"80gr","cheese"=>"100gr"}}]
Tab.any? {|h| h.assoc("pizza") } #=> true
Tab.any? {|h| h.has_key?("pizza") } #=> true