在Swift 4中如何合并包含数组值的字典

5
我有以下两个字典需要合并。
var dict1 = ["May 21": [1,2],
             "May 22": [3,4]]

var dict2 = ["May 22": [5,6],
             "May 23": [7,8]]

这是我想要的结果:
["May 21": [1, 2],
 "May 22": [3, 4, 5, 6],
 "May 23": [7, 8]]

我发现了Swift 4中的新merge()函数:

dict1.merge(dict2, uniquingKeysWith: { (old, _) in old })

当然,这样做无法正确合并数组,只会用新值或旧值替换它。

有没有一种Swifty的方法来做到这一点,也许使用一些closures?当然,我可以像这样循环遍历所有的键和值,但这似乎有点不干净:

func mergeDicts(dict1: [String: [Int]], dict2: [String: [Int]]) -> [String: [Int]] {
    var result = dict1
    for (key, value) in dict2 {
        if let resultValue = result[key] {
            result[key] = resultValue + value
        } else {
            result[key] = value
        }
    }
    return result
}
1个回答

7
你已经找到了正确的方法,只需要在去重闭包中连接数组值即可:
var dict1 = ["May 21": [1,2], "May 22": [3,4]]
var dict2 = ["May 22": [5,6], "May 23": [7,8]]

dict1.merge(dict2, uniquingKeysWith: +)

print(dict1)
// ["May 22": [3, 4, 5, 6], "May 23": [7, 8], "May 21": [1, 2]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接