To adhere to the API Design Guidelines, I think it should be named "mappingValues", right?
On Wed, Apr 13, 2016 at 4:23 AM, Vladimir.S via swift-evolution < [email protected]> wrote: > As for mapKeys and many values into a single key. I believe we should have > a choice - do we expect multiply values for the same key or not. Just like > "+" and integer overflow : by default it raises the error, but if "&+" - we > expect the overflow. I can imagine situations when it is ok for me to have > different values for the same key(if I don't care which of values should be > for that key in result dictionary). > So my proposal is some additional mapKey(allowMultiplyValues: true) {...} > or in any other form/name. > > On 13.04.2016 13:38, Ross O'Brien via swift-evolution wrote: > >> +1 on mapValues. >> >> DictionaryLiteral already throws an exception if it includes duplicate >> keys, so I'd expect mapKeys to throw an error if multiple source keys >> mapped to the same destination key. >> >> On Wed, Apr 13, 2016 at 11:28 AM, Miguel Angel Quinones via >> swift-evolution >> <[email protected] <mailto:[email protected]>> wrote: >> >> I'm +1 for adding mapValues. Very useful functionality and trivial to >> implement. >> >> > > I.e. I suggest to implement and mapKeys() also. It could be also >> useful in some situations. >> > `mapKeys` is much more dangerous, because you could end up mapping >> many values into a single key. You kind of need to combine the values >> somehow. Perhaps: >> > >> > extension Dictionary { >> > func mapValues__(_ valueTransform: @noescape Value throws >> ->OutValue) rethrows ->[Key: OutValue] { … } >> > >> > func mapKeys__(_ keyTransform: @noescape Key throws ->OutKey) >> rethrows ->[OutKey: [Value]] { … } >> > >> > // Possibly flatMap variants, too? >> > } >> > >> > extension Dictionary where Value: Sequence { >> > func reduceValues__(_ initial: OutValue, combine: @noescape >> (OutValue, Value.Iterator.Element) throws ->OutValue) rethrows ->[Key: >> OutValue] { >> > return mapValues { $0.reduce(initial, combine: combine) } >> > } >> > } >> > >> > Which you would end up using like this: >> > >> > let wordFrequencies: [String: Int] = … >> > let firstLetterFrequencies: [Character: Int] = >> wordFrequencies.mapKeys { $0.characters.first! }.reduceValues(0, combine: +) >> > >> > -- >> > Brent Royal-Gordon >> > Architechies >> > >> > >> > >> >______ >> >> -- >> Miguel Angel Quinones >> >> _______________________________________________ >> swift-evolution mailing list >> [email protected] <mailto:[email protected]> >> https://lists.swift.org/mailman/listinfo/swift-evolution >> >> >> >> >> _______________________________________________ >> swift-evolution mailing list >> [email protected] >> https://lists.swift.org/mailman/listinfo/swift-evolution >> >> _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution >
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
