-2

是否有一个红宝石函数来检查一个数字是否在一个数组中?

就像是:

some_number in?(array)
4

3 回答 3

7

数组#包括?

my_array.include? 25
于 2012-05-15T00:32:06.137 回答
4

您可以include?在数组上使用该方法。

一个例子:

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

=> true
于 2012-05-15T00:32:03.500 回答
2

没有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?...进行比较

于 2012-05-15T03:23:54.280 回答