Swift - 什么决定了词典集合的顺序?
Swift - what determines the order of a Dictionary Collection?
当我说顺序时 - 我的意思是编译器选择显示结果的顺序,我知道字典没有像数组那样的索引。
我有以下词典:
let groups :Dictionary<String,AnyObject> = [
"Data": ["Save", "Restore"],
"Load Tabs": ["Reload Tabs when selecting tab"],
"Privacy": ["Set Passcode"],
"About Me": ["Twitter", "LinkedIn"]]
但是控制台显示是这样的:
["Privacy": (
"Set Passcode"
), "Load Tabs": (
"Reload Tabs when selecting tab"
), "Data": (
Save,
Restore
), "About Me": (
Twitter,
LinkedIn
)]
如您所见,顺序不同,但当我更改字典代码的顺序时,输出仍然相同。
所以有人可以为我澄清一下,以便我更好地理解这是如何实现的吗?我不是要操纵字典,而是要了解输出是如何确定的。
如果键没有固定顺序,每次字典给出输出时它不应该随机出现吗?
Dictionary
s 对 Hashable
键进行操作,并使用 hash table 实现,这是一种常用的方式来表示具有 O(1)
查找的关联数组。哈希表通常对少量键值对(低于桶阈值)按哈希码的整数值排序,然后按反向插入顺序排序。这意味着在大多数情况下,您不能依赖哈希表以任何合理或可预测的顺序进行排序。
当我说顺序时 - 我的意思是编译器选择显示结果的顺序,我知道字典没有像数组那样的索引。
我有以下词典:
let groups :Dictionary<String,AnyObject> = [
"Data": ["Save", "Restore"],
"Load Tabs": ["Reload Tabs when selecting tab"],
"Privacy": ["Set Passcode"],
"About Me": ["Twitter", "LinkedIn"]]
但是控制台显示是这样的:
["Privacy": ( "Set Passcode" ), "Load Tabs": ( "Reload Tabs when selecting tab" ), "Data": ( Save, Restore ), "About Me": ( Twitter, LinkedIn )]
如您所见,顺序不同,但当我更改字典代码的顺序时,输出仍然相同。
所以有人可以为我澄清一下,以便我更好地理解这是如何实现的吗?我不是要操纵字典,而是要了解输出是如何确定的。
如果键没有固定顺序,每次字典给出输出时它不应该随机出现吗?
Dictionary
s 对 Hashable
键进行操作,并使用 hash table 实现,这是一种常用的方式来表示具有 O(1)
查找的关联数组。哈希表通常对少量键值对(低于桶阈值)按哈希码的整数值排序,然后按反向插入顺序排序。这意味着在大多数情况下,您不能依赖哈希表以任何合理或可预测的顺序进行排序。