是否有一个红宝石函数来检查一个数字是否在一个数组中?
就像是:
some_number in?(array)
数组#包括?
my_array.include? 25
没有in
算子或#in?
方法,但以前有人提出过,特别是由ruby-core 的顶级成员Yusuke Endoh提出的。
正如其他人所指出的,对于包括, , ,在内include?
的所有Enumerable
s都存在相反的方法:Array
Hash
Set
Range
[1, 2, 3].include?(42) # => false
请注意,如果您的数组中有许多值,它们将一个接一个地检查(即O(n)
),而查找散列将是恒定时间(即O(1)
)。因此,例如,如果您的数组是常量,那么使用 a 是一个好主意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?
在 a 上使用时要小心Range
,有一些微妙之处,所以请参阅文档并与cover?
...进行比较