a = [0,1,2,3,4,5,6,7,8,9]
(1...a.size).step(2).collect { |i| a[i] }
=> [1, 3, 5, 7, 9]
(2...a.size).step(2).collect { |i| a[i] }
=> [2, 4, 6, 8]
Конечно, учитывая 0, нечетный индекс создает немного хакерства, верно? Так как у вас будут соседние записи, которые в действительности являются странными признаками. Чтобы компенсировать это, вы можете просто добавить нулевую запись к результату первого сбора. Рассмотрим:
[a[0]] + (1...a.size).step(2).collect { |i| a[i] }
=> [0, 1, 3, 5, 7, 9]
Вы всегда можете сжать это дальше и сделать что-то вроде:
a.values_at(*(1...a.size).step(2))
=> [1, 3, 5, 7, 9]
a.values_at(*(2...a.size).step(2))
=> [2, 4, 6, 8]
Тот же хак доступен для обработки нулевой записи.