是否有ruby函数来检查数字是否在数组中?

时间:2012-05-15 00:30:00

标签: ruby

是否有ruby函数来检查数字是否在数组中?

类似的东西:

some_number in?(array)

3 个答案:

答案 0 :(得分:7)

阵列#include?

my_array.include? 25

答案 1 :(得分:4)

您可以在阵列上使用include?方法。

一个例子:

[1, 2, 3, 4, 5, 6].include?(4)

=> true

答案 2 :(得分:2)

没有in运算符或#in?方法,但之前已经提出,in particular by Yusuke Endoh是ruby-core的顶级成员。

正如其他人所指出的,对于包括EnumerableArrayHashSet的所有Range,存在相反的方法include? }:

[1, 2, 3].include?(42) # => false

请注意,如果数组中有许多值,它们将一个接一个地检查(即O(n)),而哈希的查找将是恒定时间(即O(1)) 。因此,例如,如果数组是常量,则最好使用Set。 E.g:

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

quick test显示,在10个元素include?上调用Set比在等效Array上调用它快3.5倍(如果找不到该元素)

最后结束语:在include?上使用Range时要小心,有细微之处,请参阅the doc并与cover?进行比较...