swift array'包含'功能到位优化

时间:2017-06-28 17:02:33

标签: swift optimization swift3 mathematical-optimization

我想知道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构建自己的结构优化,并保持数组排序? (也许插入排序最好与快速排序相对使用,如果这是推荐的方向)

1 个答案:

答案 0 :(得分:3)

每一帧做类似的事情都会非常低效。

我建议您重新考虑您的设计,以避免跟踪每一帧的信息量。

如果绝对必要,构建使用Dictionary而不是Array的自己的类型应该更有效率。

此外,如果它与您的用例一起使用Set可能是最好的选择。