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]