【发布时间】:2020-07-25 18:45:11
【问题描述】:
关于 iOS Swift -
初始化哪个更重/更昂贵 - 数组或字典?
当您处理大型数据集以及在可能在数组、字典或其他可能基于这些数据的其他数据结构中拥有数百万个项目的大型公司时,这个小细节很重要。
-
测试结果:
- 上面的测试结果显示了初始化 1,000,000 个空数组、字典需要多少时间,我决定也将 Set 放入其中。
-
答案: ARRAY 比 SET 和字典更轻。
-
以下是我最初写这个问题时所写的描述的其余部分:
在 Java 中,哈希映射建立在它们的数组之上。
Apple 说 Dictionary 是哈希表的“一种”,并且 “类似的数据类型称为哈希或关联数组。”
Apple 明确表示字典不是哈希映射/哈希表,也不是关联的数组。它是那些和类似的类型。
“一种类型”并不意味着它是某种革命性的新标准,与其他类似类型完全不同,但 Apple 很清楚它们并不相同。它们可能在选择如何计算哈希、如何存储在同一数组索引处发生冲突的元素等方面有所不同。
【问题讨论】:
-
一个很好的发现方法是自己分析它。您可以测试
measureBlock或简单地循环并检查前后的时间。这样您就可以 100% 放心。 -
另外,这是一个实现细节,无论它现在如何执行,如果文档不提供任何保证,它明天的执行可能会完全不同。因此,以这些发现为依据可能不是一个好主意。
-
是需要数组还是字典有关系吗?
-
@japsoccer 请参阅github.com/apple/swift/blob/master/stdlib/public/core/…,尤其是评论“本机存储是具有开放寻址和线性探测的哈希表”。他们还详细说明了字典的工作原理。
-
@Martheen - 由于键的重要性,我不想讨论何时使用数组与使用字典更重要,这可能比数组的索引更有意义,给定 x, y 和 z 用例。请继续关注主题。
标签: ios arrays swift performance dictionary