Поиск по массивам в Ruby с использованием диапазона - PullRequest
1 голос
/ 10 октября 2011

Я видел много других вопросов, затрагивающих тему, но ничего, кроме темы, чтобы дать ответ на мою конкретную проблему.Есть ли способ найти массив и вернуть значения в заданном диапазоне ... для ясности у меня есть один массив = [0,5,12] Я хотел бы сравнить массив с другим массивом (array2), используя диапазон чисел.Используя массив [0] в качестве отправной точки, как бы я возвращал все значения из массива 2 +/- 4 массива [0].

В этом конкретном случае возвращенные числа из массива 2 будут в диапазоне -4и 4.

Спасибо за помощь ниндзя.

1 Ответ

2 голосов
/ 10 октября 2011

Создайте диапазон, который является вашей целью ± 4, и затем используйте Enumerable#select (помните, что массив включает в себя Enumerable) и Range#include?.

Напримердавайте посмотрим на 11 ± 4 в массиве, который содержит целые числа от 1 до 100 (включительно):

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#& рассматривает массивы как наборы, поэтому оно удаляет дубликаты и не гарантирует порядок сохранения.

...