是否有一个红宝石函数来检查一个数字是否在一个数组中?
就像是:
some_number in?(array)
数组#包括?
my_array.include? 25
没有in算子或#in?方法,但以前有人提出过,特别是由ruby-core 的顶级成员Yusuke Endoh提出的。
正如其他人所指出的,对于包括, , ,在内include?的所有Enumerables都存在相反的方法:ArrayHashSetRange
[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?...进行比较