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

Reply via email to