想象一下,你有一堆 NSArray。这些数组都包含包裹在 NSValues 中的 CGPoints。所有元素都不是唯一的。所以某些元素可以出现在多个数组中。将这些数组组合成一个数组以使结果数组只包含唯一元素的最快方法是什么?
目前我正在这样做:
- 使用将每个数组插入 NSSet
setByAddingObjectsFromArray
- 用集合的内容填充结果数组
另一种选择是:
- 遍历每个数组一次并将每个值插入到 NSDictionary 中(如果它不在其中)
- 遍历字典的键一次并将每个键插入结果数组
传统的运行时分析表明,第一个选项应该随O(n log n)
n 是所有初始数组中元素的数量(遍历所有元素并将每个元素插入到二叉搜索树或类似的日志时间)进行缩放。对于第二种方法,运行时间是O(n)
因为查找和插入哈希表是在摊销的常数时间内运行的。然而,在阅读了一些有关 Apple 数据结构的信息后,假设它们的行为类似于传统数据结构似乎是愚蠢的。