Вы можете просто добавить туда блок select
до map
:
>> [1,2,3,4,5].select { |x| x.odd? }.map{ |x| x*x }
=> [1, 9, 25]
Синоним для выбора: find_all
.
Как вы, наверное, догадались, select
в Ruby примерно эквивалентен LINQ Where
. Выбор занимает блок, и каждый элемент в вашем Enumerable
передается этому блоку; когда блок возвращает истину (не ложь, не ноль), тогда этот элемент select
ed.
Антоним для select
: reject
. reject
предпочтительнее, когда ваш выбор отрицателен, то есть
ary.select {|x| x != 'foo'}
является менее предпочтительным, чем
ary.reject {|x| x == 'foo'}