`uniqued(on:)` is missing a `uniquingWith` overload.
JessyCatterwaul opened this issue · 1 comments
JessyCatterwaul commented
With dictionaries, we have a uniquingKeysWith
parameter. It would be helpful to have similar for uniqued
.
This came up in a Stack Overflow Q/A. The following works but relies on arrays—we should have something better in Algorithms
.
import struct OrderedCollections.OrderedDictionary
public extension Sequence {
@inlinable func uniqued<Subject: Hashable>(
on projection: (Element) throws -> Subject,
uniquingWith combine: (Element, Element) throws -> Element
) rethrows -> [Element] {
try OrderedDictionary(keyed(by: projection), uniquingKeysWith: combine)
.values
.elements
}
}
public extension Sequence {
@inlinable func keyed<Key: Hashable>(
by key: (Element) throws -> Key
) rethrows -> [KeyValuePairs<Key, Element>.Element] {
try map { (try key($0), $0) }
}
}