
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/