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
有没有办法让上述内容成为现实?
我无法找到有关上述哈希的任何文档。
答案 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
类型都有,因此Hash
和Set
也支持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对象都有两个方法:keys
和values
。 keys方法返回哈希中所有keys
的数组。同样地,values
返回仅values
的数组。
对于E.g
restaurant_menu = { "Ramen" => 3, "Dal Makhani" => 4, "Coffee" => 2 }
restaurant_menu.keys
=> ["Ramen", "Dal Makhani", "Coffee"]