2015-10-15 166 views
4

Swift为我们提供了许多新的功能,例如(最后!)连接字符串和数组。但不支持字典。连接字典的唯一方法是为它们重载+操作吗?在Swift中连接两个字典

let string = "Hello" + "World" // "HelloWorld" 
let array = ["Hello"] + ["World"] // ["Hello", "World"] 
let dict = ["1" : "Hello"] + ["2" : "World"] // error =(
+0

看到这个链接可能会对你有所帮助http://stackoverflow.com/questions/30948326/how-to-combine-two-nsdictionary-in-swift –

+2

检查这个... http://stackoverflow.com/questions/24051904/how-do-you-add-a-dictionary-of-items-into-another-dictionary –

回答

10

这是不可能的,因为第二个字典中可能有匹配键。但是你可以手动完成,在这种情况下,字典中的值将被替换。

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

for key in dict2.keys { 
    dict[key] = dict2[key] 
} 
15

使用方法如下:

  1. 将这个在任何地方,例如词典+ Extension.swift

    func +<Key, Value> (lhs: [Key: Value], rhs: [Key: Value]) -> [Key: Value] { 
        var result = lhs 
        rhs.forEach{ result[$0] = $1 } 
        return result 
    } 
    
  2. 现在你的代码只是工作

    let string = "Hello" + "World" // "HelloWorld" 
    let array = ["Hello"] + ["World"] // ["Hello", "World"] 
    let dict = ["1" : "Hello"] + ["2" : "World"] // okay =) 
    

编辑:

至于建议@Raphael的+迹象暗示计算是可交换的。请注意,情况并非如此。例如[2: 3] + [2: 4][2: 4] + [2: 3]的结果并不相同。

+0

'+'是一个不错的选择:它通常是一个交换操作符,而这个操作符不是。 – Raphael

+0

嘿@Raphael,为什么它不可交换?给出两个字典,你将得到与[[1]:“Hello”] + [“2”:“World”]或[[2]:“World”] + [“1”: “你好”]' –

+1

@YuchenZhong考虑冲突键的情况:'[1:2,2:3] + [2:4,3:5] vs'[2:4,3:5] + [1 :2,2:3]'。 – Raphael