你在寻找include? :
>> ['Cat', 'Dog', 'Bird'].include? 'Dog'
=> true
有一个in?方法中ActiveSupport因为 V3.1(滑轨的一部分),如通过 @campaterson 指出。所以在 Rails 中,或者如果你require 'active_support' ,你可以写:
'Unicorn'.in?(['Cat', 'Dog', 'Bird']) # => false OTOH,也没有in运营商或#in? Ruby 本身的方法,尽管之前已经提出过, 特别是 Yusuke Endoh是 ruby-core 的顶级成员。
正如其他人所指出的,反向方法include?存在,对于所有Enumerable包括Array , Hash , Set , Range :
['Cat', 'Dog', 'Bird'].include?('Unicorn') # => false请注意,如果数组中有许多值,它们将一个接一个地检查(即O(n) ),而散列的查找将是恒定时间(即O(1) )。因此,例如,如果数组是常量,则最好使用Set 。例如:
require 'set'
ALLOWED_METHODS = Set[:to_s, :to_i, :upcase, :downcase
# etc
]
def foo(what)
raise "Not allowed" unless ALLOWED_METHODS.include?(what.to_sym)
bar.send(what)
end 快速测试显示调用include?在 10 个元素Set上比在等效Array上调用它快 3.5 倍(如果找不到该元素)。
最后结束语:使用include?时要小心include?在Range ,有细微之处,所以请参考文档并与cover?进行比较cover? ...
尝试
['Cat', 'Dog', 'Bird'].include?('Dog')