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的项目顺序可以被认为是任意的。