Существует метод Enumerable#reject
, который служит только цели:
(1..4).reject{|x| x == 3}.collect{|x| x + 1}
Практика непосредственного использования вывода одного метода в качестве ввода другого называется цепочкой методов и очень распространена в Ruby.
КСТАТИ, map
(или collect
) используется для прямого отображения ввода, перечисляемого на выход. Если вам нужно вывести разное количество элементов, скорее всего, вам нужен другой метод Enumerable
.
Редактировать: Если вас беспокоит тот факт, что некоторые элементы повторяются дважды, вы можете использовать менее элегантное решение на основе inject
(или его аналогичный метод с именем each_with_object
):
(1..4).each_with_object([]){|x,a| a << x + 1 unless x == 3}