想象一下,你有一堆NSArrays。这些数组都包含NSValues中包含的CGPoints。所有元素都不是唯一的。因此某些元素可以出现在多个数组中。 将这些数组合并为单个数组的最快方法是什么,以便生成的数组只包含唯一元素?
目前我这样做:
setByAddingObjectsFromArray
另一种选择是:
传统的运行时分析说第一个选项应该与O(n log n)
一起扩展,其中n是所有初始数组中的元素数量(遍历所有元素并将每个元素插入二进制搜索树或类似的日志时间)。对于第二种方法,运行时为O(n)
,因为查找和插入哈希表以分摊的常量时间运行。
然而,在仔细阅读了Apple的数据结构后,假设它们的行为与传统的数据结构相似似乎是愚蠢的。
答案 0 :(得分:3)
由于这两种方法都介于O(n)
和O(n log n)
之间且您的n可能足够小以至于log n
有界且很小,因此常数因素可能会决定其中哪一种是最快的。
此时,实际上使用看起来像您的用例的数据进行基准测试是最好的选择。
我相信,但不确定,NSSet也是用哈希实现的。
答案 1 :(得分:1)
实际上......我认为时间几乎相同,但是,在NSDictionary的情况下,你会得到一点内存开销,因为在这种情况下你需要将密钥复制到那个NSDictionary。
他们NSDictionary
和NSSet
的工作方式相同:
hash
是否正常isEqual
你提到的方法没有太大区别。