[dictionary] 다른 사전에 항목 사전을 추가하는 방법

Swift의 배열은 + = 연산자를 지원하여 한 배열의 내용을 다른 배열에 추가합니다. 사전을 위해 쉬운 방법이 있습니까?

예 :

var dict1 = ["a" : "foo"]
var dict2 = ["b" : "bar"]

var combinedDict = ... (some way of combining dict1 & dict2 without looping)



답변

+=대한 연산자를 정의 할 수 있습니다 ( Dictionary예 :

func += <K, V> (left: inout [K:V], right: [K:V]) { 
    for (k, v) in right { 
        left[k] = v
    } 
}


답변

Swift 4에서는 다음을 사용해야합니다 merging(_:uniquingKeysWith:).

예:

let dictA = ["x" : 1, "y": 2, "z": 3]
let dictB = ["x" : 11, "y": 22, "w": 0]

let resultA = dictA.merging(dictB, uniquingKeysWith: { (first, _) in first })
let resultB = dictA.merging(dictB, uniquingKeysWith: { (_, last) in last })

print(resultA) // ["x": 1, "y": 2, "z": 3, "w": 0]
print(resultB) // ["x": 11, "y": 22, "z": 3, "w": 0]


답변

어때요?

dict2.forEach { (k,v) in dict1[k] = v }

그러면 dict2의 모든 키와 값이 dict1에 추가됩니다.


답변

현재 Swift Standard Library Reference for Dictionary를 보면 사전을 다른 사전으로 쉽게 업데이트 할 수있는 방법이 없습니다.

당신은 그것을 할 확장을 쓸 수 있습니다

var dict1 = ["a" : "foo"]
var dict2 = ["b" : "bar"]

extension Dictionary {
    mutating func update(other:Dictionary) {
        for (key,value) in other {
            self.updateValue(value, forKey:key)
        }
    }
}

dict1.update(dict2)
// dict1 is now ["a" : "foo", "b" : "bar]


답변

Swift 4merging(_:uniquingKeysWith:)귀하의 경우에 다음을 제공합니다 .

let combinedDict = dict1.merging(dict2) { $1 }

속기 폐쇄는을 반환 $1하므로 dict2의 값은 키와 충돌 할 때 사용됩니다.


답변

Swift 라이브러리에 내장되어 있지 않지만 연산자 오버로드로 원하는 것을 추가 할 수 있습니다. 예 :

func + <K,V>(left: Dictionary<K,V>, right: Dictionary<K,V>)
    -> Dictionary<K,V>
{
    var map = Dictionary<K,V>()
    for (k, v) in left {
        map[k] = v
    }
    for (k, v) in right {
        map[k] = v
    }
    return map
}

이렇게하면 +연산자에 사전을 추가하는 데 사용할 수있는 사전에 대한 연산자가 오버로드됩니다. +예 :

var dict1 = ["a" : "foo"]
var dict2 = ["b" : "bar"]

var dict3 = dict1 + dict2 // ["a": "foo", "b": "bar"]


답변

스위프트 3 :

extension Dictionary {

    mutating func merge(with dictionary: Dictionary) {
        dictionary.forEach { updateValue($1, forKey: $0) }
    }

    func merged(with dictionary: Dictionary) -> Dictionary {
        var dict = self
        dict.merge(with: dictionary)
        return dict
    }
}

let a = ["a":"b"]
let b = ["1":"2"]
let c = a.merged(with: b)

print(c) //["a": "b", "1": "2"]