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.
irb> numbers = [3, 6, 7, 9, 5, 4]
# we can use select & map to find square of odd numbers
irb> numbers.select { |x| x.odd? }.map { |x| x**2 }
=> [9, 49, 81, 25]
# or we can use map & compact to find square of odd numbers
irb> numbers.map { |x| x**2 if x.odd? }.compact
=> [9, 49, 81, 25]
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.
irb> numbers = [3, 6, 7, 9, 5, 4]
irb> numbers.filter_map { |x| x**2 if x.odd? }
=> [9, 49, 81, 25]
The original discussion had started 8 years back. Here is the latest thread and github commit for reference.
If this blog was helpful, check out our full blog archive.