条件在散列中的键中具有多个值

时间:2014-10-08 10:54:51

标签: ruby ruby-on-rails-4

cities = { 
 :birmingham => ['b31', 'b32', 'b33'],
 :walsall => ['ws1', 'ws2', 'ws3']
 }

我正在教自己Ruby,我想出了上述内容。我想要一个if语句:

if cities[:walsall] == 'ws1'
 puts "ws1 is a postcode of Walsall"
else
 puts "Your postcode was not found in the city you've typed"
end

有没有办法让上述内容成为现实?

我无法找到有关上述哈希的任何文档。

3 个答案:

答案 0 :(得分:1)

尝试:

if cities[:walsall].include? 'ws1'

小建议:当你正在寻找合适的方法时,你可以打开一个控制台,获得一个你期望应该拥有你正在寻找的方法的对象(在这种情况下是任何数组)并调用:

`puts object.methods`     # In this case it would be [].methods

它将为您提供给定对象可用的完整方法列表。然后,您可以通过它们检查是否有任何方法名称听起来适合您的需要。然后,您可以使用ruby <object_class> <method name>进行谷歌搜索。 - 这是学习新方法的最佳方法,而ruby非常重视它们。

答案 1 :(得分:0)

与BroiSatse表示的一样,Array具有方法include?,可用于检查元素的存在。实际上Ruby中的所有Enumerable类型都有,因此HashSet也支持include?

对于您使用的示例,数组就可以了。请注意,如果列表很大,那么检查元素是否存在可能会变得相当昂贵。对于此类用例,Set更合适:

Set.new(['b31', 'b32', 'b33']).include?('b32') # true

答案 2 :(得分:0)

试试这个:

 if cities.values[1].include?('ws1')
   puts "ws1 is a postcode of Walsall"
 else
   puts "Your postcode was not found in the city you've typed"
 end
#=> ws1 is a postcode of Walsall

每个Hash对象都有两个方法:keysvalues。 keys方法返回哈希中所有keys的数组。同样地,values返回仅values的数组。

对于E.g

restaurant_menu = { "Ramen" => 3, "Dal Makhani" => 4, "Coffee" => 2 }
restaurant_menu.keys
=> ["Ramen", "Dal Makhani", "Coffee"]