如何快速更新字典键?

ale*_*lex 3 dictionary swift

我正在尝试制作一个带有型号名称和价格的两列表。每个模型都可以编辑和保存(另见)。为此,我想我需要一本字典:

var models = ["iPhone 6 plusss Gold 128 GB" : 1000,"iPhone 6 Plus Gold 64 GB" : 500, "iPhone 6 Gold 128 GB" : 250, "iPhone 6 Gold 16 GB" : 100]
Run Code Online (Sandbox Code Playgroud)

但是我想更新键 0,因为例如我拼错了“plusss”。我怎样才能做到这一点?

我找到了如何更新键值对:

models.updateValue(200, forKey: "iPhone 6 Gold 16 GB")
Run Code Online (Sandbox Code Playgroud)

但是我如何更新密钥?

[编辑] 显然我正在以错误的方式“思考”它。我正在阅读词典,我认为最好的方法是上课(如 vdian 评论)

Cod*_*ent 6

您无法更改密钥,但可以删除现有密钥并添加新密钥:

extension Dictionary {
    mutating func changeKey(from: Key, to: Key) {
        self[to] = self[from]
        self.removeValueForKey(from)
    }
}

var models = ["iPhone 6 plusss Gold 128 GB" : 1000,"iPhone 6 Plus Gold 64 GB" : 500, "iPhone 6 Gold 128 GB" : 250, "iPhone 6 Gold 16 GB" : 100]
models.changeKey("iPhone 6 plusss Gold 128 GB", to: "iPhone 6 plus Gold 128 GB")
Run Code Online (Sandbox Code Playgroud)


Acc*_*ied 5

在 Swift 中,字典需要密钥来确认 Hashable 协议。因此,为了更改密钥,您需要删除以前的条目并添加一个新条目。您不能更改密钥,因为条目可能会转到另一个存储桶。有必要查找旧条目删除它并插入新条目。有关更多信息,哈希表如何工作,请查看以下线程哈希表如何工作?

  • 从 [文档](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableDictionary_Class/index.html#//apple_ref/occ/cl/NSMutableDictionary) 使用 `NSMutableDictionary`的`setObject:forKey:` 和`removeObjectForKey:` (2认同)