检查Ruby中数组是否存在值
我有一个价值'Dog'和数组['Cat', 'Dog', 'Bird'] 。
如何检查它是否存在于数组中而不循环? 有没有简单的方法来检查值是否存在,仅此而已?
你正在寻找include? :
>> ['Cat', 'Dog', 'Bird'].include? 'Dog'
=> true
有一个in? 方法在ActiveSupport (Rails的一部分)自v3.1以来,正如@campaterson所指出的那样。 所以在Rails中,或者如果你require 'active_support' ,你可以写:
'Unicorn'.in?(['Cat', 'Dog', 'Bird']) # => false
OTOH,没有in运营商或#in? 方法,尽管之前已经提出过,特别是Yusuke Endoh是红宝石核心的顶尖成员。
正如其他人所指出的,相反的方法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')
链接地址: http://www.djcxy.com/p/641.html
