> On Jan 8, 2018, at 3:23 PM, Gregg Wonderly via swift-evolution 
> <swift-evolution@swift.org> wrote:
> But why wouldn’t the key also be available so that you might be able to have 
> selective handling of first vs last for each key?

Having only the values allows you to do some nice higher-order things, like:

        let histogram = Dictionary(values.map { ($0, 1) }, uniquingValuesWith: 

In other words, the same functions you could use with `reduce` can be used with 
`init(_:uniquingValuesWith:)`. If the function took a third parameter, we would 
lose this property.

There's a bunch of very reasonable things you can't do with 
`Dictionary(_:uniquingValuesWith:)`; for instance, you can't cause the 
initializer to fail by returning `nil`, only by throwing an error. Supporting 
these features would either complicate cases where you don't need them, or 
require us to provide another overload. Given that 
`Dictionary(_:uniquingValuesWith:)` and friends are just conveniences, and 
reimplementing them requires only a few lines of straightforward code, it's 
just not worth supporting every plausible variant.

(For what it's worth, the Swift Evolution proposal which added this 
initializer, [SE-0165 Dictionary & Set 
 touches on some of these issues. A big part of a proposal's role is to 
document the reasons for Swift's designs; if you ever wonder why something in 
Swift is designed the way it is, the feature's evolution proposal is a good 
place to start.)

Brent Royal-Gordon

swift-evolution mailing list

Reply via email to