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