> 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 Enhancements](https://github.com/apple/swift-evolution/blob/master/proposals/0165-dict.md), 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 Architechies _______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution