Swift:合并具有重复键但唯一值的字典数组

Swift: Merge Array of dictionaries with duplicate key but unique values

我有一组字典,其中包含相同的键但不同的值。我想合并这些字典并添加相同键的所有值,如下所示:

var arrayofDict = [["2019":"A"],["2019":"B"],["2019":"C"],["2018":"A"],["2018":"c"],["2017":"A"],["2017":"B"],["2017":"C"],["2016":"A"],["2015":"A"],["2015":"B"]]

数组形式的预期结果如下:

   var newDict = [["2019":["A","B","C"]],["2018":["A","C"]],["2017":["A","B","C"]],["2016":["A"]],["2015":["A","B"]]]

这显示了如何构建单个词典。你的 "expected result" 是一个数组。这是您真正期望的还是您想要的数组?

您可以迭代字典项并构建字典条目:

var arrayofDict = [["2019":"A"],["2019":"B"],["2019":"C"],["2018":"A"],["2018":"c"],["2017":"A"],["2017":"B"],["2017":"C"],["2016":"A"],["2015":"A"],["2015":"B"]]

var result = [String : [String]]()
for dict in arrayofDict {
    for (key, value) in dict {
        result[key, default: []].append(value)
    }
}

print(result)
["2016": ["A"], "2018": ["A", "c"], "2015": ["A", "B"], "2019": ["A", "B", "C"], "2017": ["A", "B", "C"]]

或者,如果你想要一个数组:

let result2 = result.map { [[=12=].key: [=12=].value] }
print(result2)
[["2015": ["A", "B"]], ["2016": ["A"]], ["2019": ["A", "B", "C"]], ["2018": ["A", "c"]], ["2017": ["A", "B", "C"]]]

以更实用的方式作为@vacawama

let result = arrayofDict.reduce(into: [String:[String]]()) { (acc, d) in
    for key in d.keys {
        // don't worry to force unwrap d[key], if key exist, the value is not nil
        acc[key, default: []].append(d[key]!)
    }
}