在两个哈希数组中搜索字符串

时间:2013-05-22 21:17:32

标签: ruby

我写了以下内容:

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"。请帮助我的人。我找不到任何解决方案。

2 个答案:

答案 0 :(得分:5)

在ruby文档中,这个问题的非常有用的东西列在Enumerable类中。根据您想要找到它的严格程度,您有几个选择,但

Tab.any?{|recipe| recipe.keys.include?("pizza")}

应该有效。

答案 1 :(得分:2)

您可以查看方法 - Hash#assocHash#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