Swift - 啥决定了字典集合的顺序?

Posted

技术标签:

【中文标题】Swift - 啥决定了字典集合的顺序?【英文标题】:Swift - what determines the order of a Dictionary Collection?Swift - 什么决定了字典集合的顺序? 【发布时间】:2015-11-14 21:06:02 【问题描述】:

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

我有以下字典:

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

但是控制台显示它是这样显示的:

[“隐私”:( “设置密码” ), "加载标签": ( “选择选项卡时重新加载选项卡” ), “数据”: ( 节省, 恢复 ), “关于我”: ( 推特, 领英 )]

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

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

如果键没有固定的顺序,每次字典给出输出时它不应该随机出现吗?

【问题讨论】:

【参考方案1】:

Dictionarys 对Hashable 键进行操作,并使用hash table 实现,这是一种常用的方法来表示具有O(1) 查找的关联数组。哈希表通常按哈希码的整数值对少量键值对(低于桶阈值)进行排序,然后按反向插入顺序排序。这意味着在大多数情况下,您不能依赖哈希表以任何合理或可预测的顺序进行排序。

【讨论】:

以上是关于Swift - 啥决定了字典集合的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

Swift快速入门集合

Swift 字典 Dictionary 集合类型

python 字典 与 集合 的特点,及它们背后的散列表

《从零开始学Swift》学习笔记(Day 16)——字典集合

swift资源库—3—字典/集合/数组

列表和字典有啥区别?