SWIFT 数组"包含"功能就地优化



我想知道contains函数的内置数组结构是否具有任何优化。如果它每次运行时都对contains进行线性搜索,那么它充其量是O(n(,它会变成O(n^2(,因为我将在另一组点上循环以进行检查,但是如果它以某种方式进行检查在幕后排序的数组第一次运行的阵列,然后每个后续的"包含"将是o(log(log(n((。

我的数组逐渐变得更大,用户进入应用程序的深度越大,并且我使用的是"包含"很多,因此我希望它能减慢应用程序的速度应用程序。

如果该数组没有任何幕后优化,那么我应该构建自己的?(例如,QuickSort,每次添加到数组时进行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构建自己的结构优化,并保持数组排序?(如果这是推荐的方向,也许插入类别最好使用与QuickSort相对(

做类似的事情,每个帧都会非常效率。

我建议对您的设计进行重新思考,以避免跟踪每个框架的信息。

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

另外,如果使用Set与您的用例一起使用,则可能是最佳选择。

最新更新