/ / Zusammenführen von Wörterbüchern mit Arrays als Werte in Swift 4 - swift, dictionary, merge, swift4

Wörterbücher mit Arrays als Werte in Swift 4 zusammenführen - swift, dictionary, merge, swift4

Ich habe die folgenden zwei Wörterbücher, die ich zusammenführen möchte.

var dict1 = ["May 21": [1,2],
"May 22": [3,4]]

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

Das ist das Ergebnis, nach dem ich suche:

["May 21": [1, 2],
"May 22": [3, 4, 5, 6],
"May 23": [7, 8]]

Ich habe die neuen merge () Funktionen in Swift 4 gefunden:

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

Aber das wird natürlich die Arrays nicht richtig zusammenführen, sondern nur durch den neuen oder alten Wert ersetzen.

Gibt es einen Swifty Weg, um dies zu tun, vielleicht mit einigen Schließungen? Ich könnte natürlich einfach alle Tasten und Werte durchlaufen, aber das scheint ein bisschen schmutzig zu sein:

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
}

Antworten:

2 für die Antwort № 1

Sie haben bereits die richtige Methode gefunden, Sie müssen nur verketten die Array-Werte im Uniforming-Closing:

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