Issue #19787 has been updated by mame (Yusuke Endoh).
It does not make sense to me to provide `.foo_map { ... }` for all patterns like `.map {
... }.foo`.
`flat_map` was introduced for some reasons:
https://blade.ruby-lang.org/ruby-core/26287
Is `.map { ... }.uniq` such a very frequent idiom? `.uniq_map { ... }` is not as concise
as `.map { ... }.uniq`. Scala doesn't seem to provide `uniqMap`.
I think the only reason for introducing `uniq_map` is to avoid creating an intermediate
array. However, there is a `.lazy` for exactly that purpose: `.lazy.map { ...
}.uniq.to_a`.
Considering the above, I think the motivation is too weak to provide `uniq_map`.
----------------------------------------
Feature #19787: Add Enumerable#uniq_map, Enumerable::Lazy#uniq_map, Array#uniq_map and
Array#uniq_map!
https://bugs.ruby-lang.org/issues/19787#change-104015
* Author: joshuay03 (Joshua Young)
* Status: Open
* Priority: Normal
----------------------------------------
I would like to propose a collection of new methods, `Enumerable#uniq_map`,
`Enumerable::Lazy#uniq_map`, `Array#uniq_map` and `Array#uniq_map!`.
TL;DR: It's a drop in replacement for `.map { ... }.uniq`, with (hopefully) better
performance.
I've quite often had to map over an array and get its unique elements. It occurred to
me when doing so recently that Ruby doesn't have a short form method for doing that,
similar to how `.flat_map { ... }` replaces `.map { ... }.flatten` and `.filter_map { ...
}` replaces `.map { ... }.compact` (with minor differences). I think these new methods
could be beneficial both in terms of better performance and writing more succinct code.
I've got a draft PR up with some initial benchmarks in the description:
https://github.com/ruby/ruby/pull/8140.
--
https://bugs.ruby-lang.org/