我有一个矩形数组。试图找出一个包含给定点的矩形。我可以迭代这个数组并使用CGRectContainsPoint来找到包含这一点的rect。伪代码如下
bar@foonabisco.com
nabisco
我觉得如果我的数组太大而我必须迭代大数组,这在性能方面可能不是优雅的解决方案。如果有任何最佳解决方案或算法以乐观的方式找到它,有人可以帮助我。
答案 0 :(得分:0)
对于大型数组,您可以使用枚举循环,它将在后台线程上运行而不会妨碍您的主线程。
答案 1 :(得分:0)
我觉得如果我的数组太大而我必须迭代大数组,这在性能方面可能不是优雅的解决方案。如果有任何最佳解决方案或算法以乐观的方式找到它,有人可以帮助我。
首先,您确实遇到了性能问题吗?在考虑如何改进算法之前确定。一旦你确信需要做些什么,那就继续......
您当前的解决方案是通过矩形集合进行线性搜索,它是一种O(N)解决方案。要改进这一点,您需要一种搜索方法,以减少您需要进行的测试次数,例如:有序集合中的二进制搜索具有更好的O(log N)行为。
要使用有序集合,您不希望为每次搜索排序无序集合,完整排序为O(NlogN)。相反,你需要考虑保持你的集合排序添加项目,以便维持排序,每次插入的性能可以是O(log N),与二进制搜索相同。
这就是一个大问题,您能为矩形设计合适的排序,以便对它们进行排序吗?如果点的x坐标小于原点的x坐标,则在测试包含时,可以通过x-coordindate对原点进行排序,然后该点不能在排序后面的任何矩形中。您可能希望根据原点坐标等来查看排序。
TL; DR:
这可能会让一切变得更快。
如果您在研究排序和搜索后遇到问题并编写了一些代码,请提出一个新问题,显示您的代码,详细说明您的算法(特别是您选择的顺序),并描述您遇到的问题。毫无疑问,有人会帮助你。
HTH