我想知道contains
函数的内置数组结构是否有任何优化。如果它在每次运行时都进行contains
的线性搜索,那么它最好是O(n),它变成O(n ^ 2),因为我将循环通过另一组要检查的点数,但如果它在幕后以某种方式对阵列进行排序,那么第一次包含'运行,然后每个后续包含'将是O(log(n))。
我有一个数组,随着用户进入应用程序的深度越来越大,我正在使用' contains'很多,所以我希望用户使用应用程序的时间越长,它就会减慢应用程序的速度。
如果阵列没有任何幕后优化,那么我应该建立自己的? (例如,快速排序,每次添加到阵列时都执行insert(newElement:, at:)
?)
具体来说,我正在使用
[CGPoint],
CGPointArrayVariable.contains(newCGPoint) // run 100s - 10000s of times ideally every frame, (but realistically probably every second)
当我使用
添加新的CGPoints
时
CGPointArrayVariable += newCGPointSet.
所以,问题是:我还可以继续使用内置的.contains
函数(它会足够快吗?)或者我应该为contains
构建自己的结构优化,并保持数组排序? (也许插入排序最好与快速排序相对使用,如果这是推荐的方向)
答案 0 :(得分:3)
每一帧做类似的事情都会非常低效。
我建议您重新考虑您的设计,以避免跟踪每一帧的信息量。
如果绝对必要,构建使用Dictionary
而不是Array
的自己的类型应该更有效率。
此外,如果它与您的用例一起使用Set
可能是最好的选择。