是否有ruby函数来检查数字是否在数组中?
类似的东西:
some_number in?(array)
答案 0 :(得分:7)
阵列#include?
my_array.include? 25
答案 1 :(得分:4)
答案 2 :(得分:2)
没有in
运算符或#in?
方法,但之前已经提出,in particular by Yusuke Endoh是ruby-core的顶级成员。
正如其他人所指出的,对于包括Enumerable
,Array
,Hash
,Set
的所有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倍(如果找不到该元素)