Ruby 2.7 adds Enumerable#filter_map

Ashik Salman

By Ashik Salman

on May 8, 2020

This blog is part of our  Ruby 2.7 series.

Ruby 2.7 adds Enumerable#filter_map which is a combination of filter + map as the name indicates. The 'filter_map' method filters and map the enumerable elements within a single iteration.

Before Ruby 2.7, we could have achieved the same with 2 iterations using select & map combination or map & compact combination.

1
2irb> numbers = [3, 6, 7, 9, 5, 4]
3
4# we can use select & map to find square of odd numbers
5
6irb> numbers.select { |x| x.odd? }.map { |x| x**2 }
7=> [9, 49, 81, 25]
8
9# or we can use map & compact to find square of odd numbers
10
11irb> numbers.map { |x| x**2 if x.odd? }.compact
12=> [9, 49, 81, 25]
13

Ruby 2.7

Ruby 2.7 adds Enumerable#filter_map which can be used to filter & map the elements in a single iteration and which is more faster when compared to other options described above.

1irb> numbers = [3, 6, 7, 9, 5, 4]
2irb> numbers.filter_map { |x| x**2 if x.odd? }
3=> [9, 49, 81, 25]
4

The original discussion had started 8 years back. Here is the latest thread and github commit for reference.

Stay up to date with our blogs. Sign up for our newsletter.

We write about Ruby on Rails, ReactJS, React Native, remote work,open source, engineering & design.