Swift-合并两个数组,同时删除重复的键并将数组值相加

时间:2018-10-07 16:17:26

标签: arrays swift dictionary array-merge

我有两个看起来像下面示例的数组。我想将两者合并在一起。如果它们的键相等,则删除重复项并将它们的两个值加在一起。

我们非常感谢您的帮助,非常感谢!

当前代码:

struct Example: Codable {
    var key: String
    var value: Int
}

var first: [Example] = []
var second: [Example] = []

first.append(Example(key: "1", value: 10))
first.append(Example(key: "2", value: 10))
first.append(Example(key: "3", value: 10))

second.append(Example(key: "2", value: 10))
second.append(Example(key: "3", value: 10))
second.append(Example(key: "4", value: 10))


let merged = Array(Dictionary([first, second].joined().map { ($0.key, $0)}, uniquingKeysWith: { $1 }).values)

当前正在打印

Example(key: "3", value: 10)
Example(key: "1", value: 10)
Example(key: "2", value: 10)
Example(key: "4", value: 10)

我想做什么:

Example(key: "3", value: 20)
Example(key: "1", value: 10)
Example(key: "2", value: 20)
Example(key: "4", value: 10)

1 个答案:

答案 0 :(得分:2)

您快到了!

uniqueKeysWith参数中,您应该创建一个新的Example,其中包含相同的键以及两个参数值的总和:

let merged = Array(Dictionary([first, second].joined().map { ($0.key, $0)}, uniquingKeysWith: { Example(key: $0.key, value: $0.value + $1.value) }).values)