在Swift中更改字典的键

时间:2015-12-28 01:15:09

标签: swift dictionary

如何更改特定值的字典键?我不能只将dict[i]更改为dict[i+1],因为这会更改该特定键的。没有dict.updateKeyForValue()就像dict.updateValueForKey()一样。

因为我的密钥是Int并且全部乱序,所以我无法通过循环修改整个键值对,因为我可能会覆盖循环尚未到达的对。有更简单的方法吗?觉得我错过了一些明显的东西。

2 个答案:

答案 0 :(得分:13)

Swift 3

func switchKey<T, U>(_ myDict: inout [T:U], fromKey: T, toKey: T) {
    if let entry = myDict.removeValue(forKey: fromKey) {
        myDict[toKey] = entry
    }
}  

var dict = [Int:String]()

dict[1] = "World"
dict[2] = "Hello"

switchKey(&dict, fromKey: 1, toKey: 3)
print(dict) /* 2: "Hello"
               3: "World" */

Swift 2

func switchKey<T, U>(inout myDict: [T:U], fromKey: T, toKey: T) {
    if let entry = myDict.removeValueForKey(fromKey) {
        myDict[toKey] = entry
    }
}    

var dict = [Int:String]()

dict[1] = "World"
dict[2] = "Hello"

switchKey(&dict, fromKey: 1, toKey: 3)
print(dict) /* 2: "Hello"
               3: "World" */

答案 1 :(得分:2)

我个人正在使用imo使其更容易实现的扩展:D

extension Dictionary {
    mutating func switchKey(fromKey: Key, toKey: Key) {
        if let entry = removeValue(forKey: fromKey) {
            self[toKey] = entry
        }
    }
}

然后使用它:

var dict = [Int:String]()

dict[1] = "World"
dict[2] = "Hello"

dict.switchKey(fromKey: 1, toKey: 3)
print(dict) /* 2: "Hello"
               3: "World" */