如何更改特定值的字典键?我不能只将dict[i]
更改为dict[i+1]
,因为这会更改该特定键的值。没有dict.updateKeyForValue()
就像dict.updateValueForKey()
一样。
因为我的密钥是Int
并且全部乱序,所以我无法通过循环修改整个键值对,因为我可能会覆盖循环尚未到达的对。有更简单的方法吗?觉得我错过了一些明显的东西。
答案 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" */