【发布时间】:2013-10-14 10:17:09
【问题描述】:
我正在寻找完成以下任务的最有效方法...
我有一个Foo 类型的对象数组,除其他属性外,Foo 有一个latitude 和一个longitude 属性。给定一个包含许多 Foo 的数组,我需要将具有匹配 lat / long 的 Foo 提取到一个新数组中。
我已经实现了几个可行的解决方案,包括使用 for 循环进行迭代和使用 NSPredicate 的解决方案,但是这两种方法都涉及通过数组进行多次迭代。这个数组可能有数十万条记录,所以我正在寻找我可以使用的东西,它可以一次性达到预期的结果。
编辑:添加一些伪代码来描述我已经采用的方法并更好地描述问题......
NSMutableArray * matchingLocations = [[NSMutableArray alloc] initWithCapacity:0];
for (Foo * checkingFoo in fooArray) {
NSMutableArray * checkingArray = [NSArray arrayWithArray:fooArray];
[checkingArray removeObject:checkingFoo];
for (Foo * foo in checkingArray) {
// I have a method coded for comparing two coordinates
if (checkingFoo.coordinate == foo.coordinate) {
[matchingLocations addObject:checkingFoo];
}
}
}
【问题讨论】:
-
为什么需要多次通行证?检查每个元素一次就足够了。
-
嗯,这可能是我做错的地方,但是对于数组中的每个项目,我都会检查所有其他项目,看看它是否重复。
-
匹配 lat,long 但与谁匹配?你想从同一个数组中删除重复的条目吗?
-
您正在搜索多个对象的匹配项?也许显示一些代码?如果您需要检查多个(且不相关的)值,则需要 O(m*n)。
-
添加了一些示例代码
标签: ios objective-c performance sorting search