2014-10-08 68 views
1
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

这是一个纯Ruby的问题,所以你不应该有Rails的标签。包括它可能会导致一些读者只关心Rails的问题,浪费时间和其他读者过滤掉Rails的问题而错过您的问题。另外,我建议你将来会用绿色的选中标记一段时间,因为它可能会阻碍其他的,可能更好的答案,对那些仍在准备答案的人来说并不好。许多提问者在选择答案之前等待几个小时。没有急于。 – 2014-10-08 17:12:02

回答

1

尝试:

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

小建议:当你正在寻找一个合适的方法,你可以打开一个控制台,让你想到应该有你要寻找的方法的对象(在这种情况下,任何阵列)和电话:

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

它会给你一个给定对象的可用方法的完整列表。然后你可以通过它们来检查是否有任何方法名称对你所需要的都很好。然后你可以用ruby <object_class> <method name>来谷歌。 - 这是学习新方法的最好方式,而且Ruby认真提供了很多方法。

+0

谢谢,这工作!我不能接受,直到10分钟。有没有办法把这个是Rails 4之后的.include?用户在哪里输入“ws1”? – Sylar 2014-10-08 11:01:28

+0

我强烈建议你先开始学习没有导轨的ruby。我从我自己的经验中知道,对于ruby来说,rails是一个非常糟糕的起点,因为它使得所有事情看起来都很纠结和模糊。如果你刚刚问到0这个问题,我很不清楚这些城市是哈希还是ActiveRecord对象。它是控制器的一部分吗?用户如何输入任何内容 - 通过某种形式? – BroiSatse 2014-10-08 11:06:47

+0

哈希将在控制器中,我会在视图中使用实例变量。我会在视图中使用if语句,但在“和”处使用if语句。包含“,那么在用户点击”ok“或”next“后会出现一个输入字段,if语句会执行 – Sylar 2014-10-08 11:10:43

0

就像BroiSatse指出的那样,Array的方法include?可用于检查元素的存在。实际上Ruby中所有的Enumerable类型都有,所以HashSet也支持include?

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

Set.new(['b31', 'b32', 'b33']).include?('b32') # true 
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方法返回Hash中所有keys的数组。同样values返回一个只有values的数组。

对于E.g

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