[swift-users] How to merge two dictionaries?

Michael Nisi michael.nisi at gmail.com
Fri Nov 11 03:31:16 CST 2016


For example, you might want to merge values:

let d1 = ["Apples": 20, "Oranges": 13]

let d2 = ["Oranges": 3, "Cherries": 9]


let d3 = [d1, d2].reduce([String : Int]()) { acc, d in

  var dx = acc

  for entry in d {

    let key = entry.key

    guard dx[key] == nil else {

      dx[key]! += entry.value

      continue

    }

    dx[entry.key] = entry.value

  }

  return dx

}


print(d3) // ["Cherries": 9, "Apples": 20, "Oranges": 16]

On Fri, Nov 11, 2016 at 9:14 AM, Ray Fix via swift-users <
swift-users at swift.org> wrote:

> Hi Mr Bee,
>
> The reason I don’t think it is provided is because it is difficult to know
> what to do when keys collide.  You could easily write such a thing and
> decide your own policy.  For example:
>
> let d1 = ["Apples": 20, "Oranges": 13]
> let d2 = ["Oranges": 3, "Cherries": 9]
>
> extension Dictionary {
>     func merged(with another: [Key: Value]) -> [Key: Value] {
>         var result = self
>         for entry in another {
>             result[entry.key] = entry.value
>         }
>         return result
>     }
> }
>
> let result = d1.merged(with: d2)
>
>
> On Nov 11, 2016, at 12:05 AM, Mr Bee via swift-users <
> swift-users at swift.org> wrote:
>
> Hi,
>
> I'm using Swift v3 on an El Capitan machine. I want to merge a dictionary
> into another compatible dictionary. However, I couldn't find addEntries
> function in the dictionary instance, like it was on NSMutableDictionary (
> https://developer.apple.com/reference/foundation/nsmutabledictionary).
>
> Does that mean that Swift standard library won't provide such similar
> function for native Swift dictionary? Or is there any other way of doing
> that natively? I mean using the built-in Swift's native dictionary function
> (https://developer.apple.com/reference/swift/dictionary), no need to
> write a custom function, or bridging to NSMutableDictionary.
>
> Thank you.
>
> Regards,
>
> –Mr Bee
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>
>
> _______________________________________________
> swift-users mailing list
> swift-users at swift.org
> https://lists.swift.org/mailman/listinfo/swift-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20161111/8897cbd2/attachment.html>


More information about the swift-users mailing list