Swift - 什么决定了词典集的顺序?

时间:2015-11-14 21:06:03

标签: swift dictionary key

当我说顺序时 - 我的意思是编译器选择显示结果的顺序,我知道字典没有像数组那样的索引。

我有以下字典:

let groups :Dictionary<String,AnyObject> = [
"Data": ["Save", "Restore"],
"Load Tabs": ["Reload Tabs when selecting tab"],
"Privacy": ["Set Passcode"],
"About Me": ["Twitter", "LinkedIn"]]

但控制台显示它显示如下:

  

[“隐私”:(       “设置密码”   ),“加载标签”:(       “选择标签时重新加载标签”   ),“数据”:(       保存,       恢复   ), “关于我”: (       推特,       LinkedIn   )]

正如您所看到的顺序不同,但是当我更改字典代码的顺序时,输出仍然是相同的。

所以有人可以为我澄清一下,所以我更了解这是如何实现的?我不是试图操纵字典,而是试图理解输出是如何确定的。

如果键没有设置顺序,每次字典给出输出时它是否应该是随机的?

1 个答案:

答案 0 :(得分:8)

DictionaryHashable个密钥进行操作,并使用hash table实现,https://github.com/emacs-helm/helm/issues/1178是一种常用的方式,用O(1)查找表示关联数组。散列表通常按小数键值对(低于桶阈值)的散列码的整数值排序,然后按反向插入顺序排序。这意味着在大多数情况下,您不能依赖哈希表以任何合理或可预测的顺序进行排序。