Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Swift:合并具有重复键但唯一值的字典数组_Ios_Swift_Dictionary_Swift5 - Fatal编程技术网

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

Ios Swift:合并具有重复键但唯一值的字典数组,ios,swift,dictionary,swift5,Ios,Swift,Dictionary,Swift5,我有一个字典数组,其中包含相同的键但不同的值。我想合并这些字典并添加相同键的所有值,如下所示: var arrayofDict = [["2019":"A"],["2019":"B"],["2019":"C"],["2018":"A"],["2018":"c"],["2017":

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

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"]]]

这显示了如何构建单个字典。您的“预期结果”是一个数组。这是您真正期望的还是您想要一个数组

您可以迭代字典项并建立字典项:

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)
或者,如果需要数组:

let result2 = result.map { [$0.key: $0.value] }
print(result2)

以更实用的方式作为@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]!)
    }
}

“我有一个字典数组,其中包含相同的键但不同的值。”我很好奇:你从哪里得到的?你能控制这些数据吗?你的预期结果实际上是一个数组,如何按年度降序排序?还要对值进行排序@vacawama
let result2=result.map{[$0.key:$0.value.sorted()};让result3=result2.sorted(按:{$0.first!.key>1.first!.key})
[["2015": ["A", "B"]], ["2016": ["A"]], ["2019": ["A", "B", "C"]], ["2018": ["A", "c"]], ["2017": ["A", "B", "C"]]]
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]!)
    }
}