使用范围在 Ruby 中搜索数组

发布于 2024-12-08 20:31:21 字数 243 浏览 0 评论 0原文

我看到很多其他问题都涉及该主题,但没有任何问题能够为我的特定问题提供答案。有没有办法搜索数组并返回给定范围内的值... 为了清楚起见,我有一个数组 = [0,5,12] 我想使用一系列数字将数组与另一个数组(array2)进行比较。 使用 array[0] 作为起点,我将如何返回 array[0] 的 array2 +/- 4 中的所有值。

在这种特殊情况下,从 array2 返回的数字将在 -4 和 4 的范围内。

感谢忍者的帮助。

i've seen a lot of other questions touch on the subject but nothing as on topic as to provide an answer for my particular problem. Is there a way to search an array and return values within a given range...
for clarity I have one array = [0,5,12]
I would like to compare array to another array (array2) using a range of numbers.
Using array[0] as a starting point how would I return all values from array2 +/- 4 of array[0].

In this particular case the returned numbers from array2 will be within the range of -4 and 4.

Thanks for the help ninjas.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暗地喜欢 2024-12-15 20:31:21

构建一个目标 ±4 的范围,然后使用 Enumerable #select (记住数组包括 Enumerable)和 范围#include?

例如,让我们在包含 1 到 100(含)之间的整数的数组中查找 11±4:

a = (1..100).to_a
r = 11-4 .. 11+4
a.select { |i| r.include?(i) }
# [7, 8, 9, 10, 11, 12, 13, 14, 15]

如果您不关心在输出中保留顺序并且数组中没有任何重复项,您可以这样做:

a & (c-w .. c+w).to_a

其中 c 是间隔的中心,w 是间隔的宽度。使用 Array#&将数组视为集合,因此它将删除重复项,并且不保证保留顺序。

Build a Range that is your target ±4 and then use Enumerable#select (remember that Array includes Enumerable) and Range#include?.

For example, let us look for 11±4 in an array that contains the integers between 1 and 100 (inclusive):

a = (1..100).to_a
r = 11-4 .. 11+4
a.select { |i| r.include?(i) }
# [7, 8, 9, 10, 11, 12, 13, 14, 15]

If you don't care about preserving order in your output and you don't have any duplicates in your array you could do it this way:

a & (c-w .. c+w).to_a

Where c is the center of your interval and w is the interval's width. Using Array#& treats the arrays as sets so it will remove duplicates and is not guaranteed to preserver order.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文