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