這個問題已經提出了很多,但我似乎無法進一步優化這段搜索代碼。使用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