Swift - объединяет два массива, удаляя дубликаты ключей и добавляя значения массивов вместе - PullRequest
0 голосов
/ 07 октября 2018

У меня есть два массива, которые выглядят примерно так, как показано ниже.То, что я хотел бы сделать, это объединить два вместе.Если их ключи равны, удалите дубликаты и сложите оба их значения вместе.

Любая помощь очень ценится, большое спасибо !!

Текущий код:

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 голосов
/ 07 октября 2018

Вы почти у цели!

В параметре uniqueKeysWith вы должны создать новый Example, содержащий тот же ключ и сумму значений двух параметров:

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