这个问题已经提出了很多,但我似乎无法进一步优化这段搜索代码。使用nspredicates优化查询搜索
此filterSet阵列具有约1000项和它采取在非模拟器iPad的8秒再现结果(仿真示出了在结果小于一第二):
for(NSString *rowID in [self.filterSet array]) {
self.rowResults = [self.filteredResults filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"rowID = %@", rowID]];
self.rowResults = [self.rowResults valueForKey:@"value"];
self.duplicateValueSet = [NSOrderedSet orderedSetWithArray:self.rowResults];
filterCount = [[self.resultsArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"SELF = %@", rowID]] count];
if([self.duplicateValueSet count] != filterCount)
filterCount -= abs([self.duplicateValueSet count] - filterCount);
if(filterCount == matchingCount)
[self.results addObject:rowID];
}
任何建议,以优化此查询?大部分搜索都在所有的过滤器和谓词排序中占据。谢谢。
编辑:所以我除去大量的代码在for循环,发现罪魁祸首是第一线
self.rowResults = [self.filteredResults filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"rowID = %@", rowID]];
这是由于某些原因用7秒钟将执行。有没有更快/更有效的方法来创建谓词来匹配rowID字符串?我想过使用makeobjectsperformselector NSArray方法,但出于某种原因,我得到NSCFNumber无法识别的选择器问题(这是说我的数组有NSNumbers而不是NSStrings)
是什么样你修改后的表现手法? – jbbenni
与931项,初始算法执行并在8.2971秒完成。有了这个优化,它已经减少到1.97秒:) – kevinl