如何在Swift中更新字典键?

4
我正在尝试制作一个包含型号名称和价格的双列表格。每个型号都可以进行编辑和保存(请看这里)。为此,我认为需要使用字典:
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]

我想更新键为0的内容,因为我拼错了“plusss”,例如。我该怎么做?

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

models.updateValue(200, forKey: "iPhone 6 Gold 16 GB")

如何更新一个键呢?

[编辑] 显然我以错误的方式“思考”了。我正在研究字典,并且认为采用类(如vadian评论中所述)是最好的方法。


1
使用固定键的语法可能更容易:var models = [{"name" : "iPhone 6 plusss Gold 128 GB", "price" : 1000},{"name" : "iPhone 6 Plus Gold 64 GB", "price" : 500}] 或者更好的是自定义 structclass - vadian
我认为你应该删除旧条目并添加新条目。 - Access Denied
1
我假设Swift中的字典就像哈希表一样工作,你不能更改键,因为条目将进入另一个桶。 - Access Denied
3个回答

6

在Swift中,字典要求键确认符合Hashable协议。因此,如果要更改键,需要删除先前的条目并添加一个新条目。您无法更改键,因为该条目可能会进入另一个桶。无论如何,将需要查找旧条目删除它并插入新条目。有关哈希表工作原理的更多信息,请参阅以下线程How does a hash table work?


3
文档中使用NSMutableDictionarysetObject:forKey:removeObjectForKey:方法。 - Arc676

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")

1
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["iPhone 6 plus Gold 128 GB"] = models.removeValue(forKey: "iPhone 6 plusss Gold 128 GB") //"iPhone 6 plus Gold 128 GB" : 1000

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接