Ruby on rails Rails方法,用于检查数组中是否出现范围内的数字

Ruby on rails Rails方法,用于检查数组中是否出现范围内的数字,ruby-on-rails,ruby,arrays,search,range,Ruby On Rails,Ruby,Arrays,Search,Range,我有一个整数数组(或者可能是一组)(可能是非连续的,但都是唯一的)和一系列(连续的)数字。如果我想检查数组中是否存在该范围内的任何数字,那么最有效的方法是什么 array = [1, 2, 5, 6, 7] range = 3..5 我可以遍历范围并检查数组是否包含?每个元素,但这似乎是浪费,而且数组和范围都可能非常大 有什么方法可以用来做某种类型的数组。包括任何?(范围),或者我应该寻找有效的搜索算法吗?我会这样做 (array & range.to_a).present? 或 我

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

array = [1, 2, 5, 6, 7]
range = 3..5
我可以遍历范围并检查数组
是否包含?
每个元素,但这似乎是浪费,而且数组和范围都可能非常大

有什么方法可以用来做某种类型的
数组。包括任何?(范围)
,或者我应该寻找有效的搜索算法吗?

我会这样做

(array & range.to_a).present?

我会根据范围的大小选择一个版本。如果范围很小,则第一个版本可能会更快,因为它只创建一次交集,并且不需要为数组中的每个元素检查
cover
。然而,如果范围很大(但数组很小),第二个版本可能会更快,因为进行一些比较可能会比从大范围生成数组并构建交叉点更快。

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


我会根据范围的大小选择一个版本。如果范围很小,则第一个版本可能会更快,因为它只创建一次交集,并且不需要为数组中的每个元素检查
cover
。然而,如果范围很大(但数组很小),第二个版本可能会更快,因为进行一些比较可能会比从大范围中生成数组并构建交叉点更快。

不需要在
&
:

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

不需要在和中使用臭味:

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

我真的很喜欢第一种方法,你介意解释一下单
&
的作用吗?另外,您是否可以将文档的链接放到
.present?
或至少解释一下它是如何工作/使用的?
&
是交叉点,它返回一个包含两个数组共有的元素的新数组:
[1,2,3]&[2,3,4]#=>[2,3]
<代码>当前?与
nil?|相反空?
@Promethean\u Sin
存在?
不是Ruby的方法。多亏了你们两位,我在标题@sawa中确实提到了Rails。谢谢语法检查[0]我真的很喜欢第一种方法,你介意解释一下单条
&
的作用吗?另外,您是否可以将文档的链接放到
.present?
或至少解释一下它是如何工作/使用的?
&
是交叉点,它返回一个包含两个数组共有的元素的新数组:
[1,2,3]&[2,3,4]#=>[2,3]
<代码>当前?与
nil?|相反空?
@Promethean\u Sin
存在?
不是Ruby的方法。多亏了你们两位,我在标题@sawa中确实提到了Rails。感谢语法检查[0]