Swift词典是否自动排序?
我有这两个词典:
let test = ["Tomorrow": "Bla", "Month": "Bla"] print(test) // ["Tuesday": "Bla", "Month": "Bla"] let test1 = ["Tomorrow": "Bla", "One Month": "Bla"] print(test2) // ["One Month": "Bla", "Tuesday": "Bla"]
似乎如果我使用关键字“One”,元素就会被放在前面。 为什么?
Swift的Dictionary
是一种基于哈希的数据结构。 除非有特定的排序机制,否则基于散列的结构中的项目顺序取决于几个因素:
- 用作键的对象的哈希值 –
hashValue
方法用于确定项目的桶号 - 结构的大小 – 由于
hashValue
可能远大于可用的桶数,因此使用限制机制(例如模数桶数)来确定实际的桶数 - 修改顺序 – 当密钥发生冲突时,这变得相关。 稍后放置具有重复散列值的元素将转到不同的存储桶,或者放置在与实际存储桶关联的列表中。
例如,如果在第二个示例中更改字典的大小,则项的顺序将反转:
var test1 = [String:String]() // Use default initial capacity test1["Tomorrow"] = "Bla" test1["One Month"] = "Bla" print(test1) // ["One Month": "Bla", "Tomorrow": "Bla"] var test2 = [String:String](minimumCapacity: 11) // Use specific capacity test2["Tomorrow"] = "Bla" test2["One Month"] = "Bla" print(test2) // ["Tomorrow": "Bla", "One Month": "Bla"]
由于其中一些参数不在您的控制之内,因此对于所有实际目的, Dictionary
的项目顺序可以被认为是任意的。