在Swift中连接两个词典

kat*_*000 5 dictionary concatenation swift

Swift给了我们很多新的能力,比如(最后!)连接字符串甚至是数组.但不支持词典.连接字典的唯一方法是为它们重载+操作吗?

let string = "Hello" + "World" // "HelloWorld"
let array = ["Hello"] + ["World"] // ["Hello", "World"]
let dict = ["1" : "Hello"] + ["2" : "World"] // error =(
Run Code Online (Sandbox Code Playgroud)

Yuc*_*ong 15

像这样使用它:

  1. 把它放在任何地方,例如Dictionary + Extension.swift:

    func +<Key, Value> (lhs: [Key: Value], rhs: [Key: Value]) -> [Key: Value] {
        var result = lhs
        rhs.forEach{ result[$0] = $1 }
        return result
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 现在你的代码正常工作

    let string = "Hello" + "World" // "HelloWorld"
    let array = ["Hello"] + ["World"] // ["Hello", "World"]
    let dict = ["1" : "Hello"] + ["2" : "World"] // okay =)
    
    Run Code Online (Sandbox Code Playgroud)

编辑:

正如@Raphael所建议的那样,+符号意味着计算是可交换的.请注意,事实并非如此.例如,[2: 3] + [2: 4]vs 的结果[2: 4] + [2: 3]不一样.

  • 字符串连接(`+`)无论如何都不是可交换的. (2认同)

Ada*_*dam 11

这是不可能的,因为第二个字典中可能存在匹配的键.但您可以手动执行此操作,在这种情况下将替换字典中的值.

var dict = ["1" : "Hello"]
let dict2 = ["2" : "World"]

for key in dict2.keys {
    dict[key] = dict2[key]
}
Run Code Online (Sandbox Code Playgroud)