xyk blog

最近は iOS 開発の記事が多めです。

Swift で Dictionary をマージする

検証環境:
Xcode 11.1
Swift 5.1

Dictionary の mergeまたはmergingメソッドを使う。

// merging
do {
    let a = ["a": 100]
    let b = ["a": 200, "b": 300]

    // 重複したKeyは a を優先させる場合
    let result1 = a.merging(b) { (a, b) in a }
    print(result1) // ["a": 100, "b": 300]
    
    // 重複したKeyは b を優先させる場合
    let result2 = a.merging(b) { (a, b) in b }
    print(result2) // ["a": 200, "b": 300]
}

// merge
do {
    var a = ["a": 100]
    let b = ["a": 200, "b": 300]

    a.merge(b) { (a, b) in a }
    print(a) // ["a": 100, "b": 300]
}

// + オペレータを使う
do {
    // 重複したKeyはValueを合計する
    let a = ["a": 100]
    let b = ["a": 200, "b": 300]

    let result = a.merging(b, uniquingKeysWith: +)
    print(result) // ["b": 300, "a": 300]
}

merge(_:uniquingKeysWith:) - Dictionary | Apple Developer Documentation

merging(_:uniquingKeysWith:) - Dictionary | Apple Developer Documentation