Swift词典是否自动排序?

时间:2016-05-18 09:19:17

标签: ios swift dictionary

我有这两个词典:

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"元素放在前面。为什么呢?

1 个答案:

答案 0 :(得分:1)

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中的项目顺序可视为任意实际目的。