用于检查范围中的数字是否出现在数组中的Rails方法

时间:2013-10-05 14:19:16

标签: ruby-on-rails ruby arrays search range

我有一个数组(或可能是一组)整数(可能是非顺序但都是唯一的)和一系列(顺序)数字。如果我想检查数组中是否存在该范围内的任何数字,那么最有效的方法是什么?

array = [1, 2, 5, 6, 7]
range = 3..5

我可以遍历范围并检查数组include?是否每个元素,但这看起来很浪费,数组和范围都很容易变大。

我是否可以使用任何方法来执行某种array.include_any?(range),或者我应该寻找有效的搜索算法?

3 个答案:

答案 0 :(得分:3)

我愿意

(array & range.to_a).present?

array.any? { |element| range.cover?(element) }

我会选择一个版本,具体取决于范围的大小。如果范围很小,第一个版本可能更快,因为它创建了一次交集,并且不需要为数组中的每个元素检查cover。然而,如果范围很大(但阵列很小),那么第二个版本可能会更快,因为在大范围内生成阵列并建立交叉点时,进行一些比较可能会更快。

答案 1 :(得分:1)

([1, 2, 5, 6, 7] & (3..5).to_a).any?
# => true

答案 2 :(得分:0)

不需要stinkin'&

array.uniq.size + range.size > (array + range.to_a).uniq.size