我正在實現一個根據用戶輸入的文本過濾UITableView的搜索字段。
該TableView中被從保持NSString的(要顯示的數據和搜索),並且可以含有6000+項陣列建立。
當用戶開始搜索時,我正在執行-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
方法。
在大陣列中搜索字符串需要很長時間
但是,我的代碼工作,但是,當數據數組很大,它非常緩慢,並創建了一個非常糟糕的用戶體驗(我的iPhone 4卡住了好幾秒鐘)。
我執行搜索(在上面提到的方法)的方法是這樣的:
NSMutableArray *discardedItems = [[NSMutableArray alloc] init]; // Items to be removed
searchResultsArray = [[NSMutableArray alloc] initWithArray:containerArray]; // The array that holds all the data
// Search for matching results
for (int i=0; i<[searchResultsArray count]; i++) {
NSString *data = [[containerArray objectAtIndex:i] lowercaseString];
NSRange r = [data rangeOfString:searchText];
if (r.location == NSNotFound) {
// Mark the items to be removed
[discardedItems addObject:[searchResultsArray objectAtIndex:i]];
}
}
// update the display array
[searchResultsArray removeObjectsInArray:discardedItems];
[myTableView reloadData];
我沒想到的是遍歷數組有幾千個項目將造成任何問題。 ..
任何建議將不勝感激!
UPDATE 我剛剛意識到什麼需要的大部分時間是這樣的:
[searchResultsArray removeObjectsInArray:discardedItems];
儀器說什麼? –
你嘗試過排序,然後使用二進制搜索? – Samir
排序是不可能的,因爲:1.我需要按照數組中的原始順序對結果進行排序。 2.我正在查找數組中每個項目的子字符串,而不是它開頭的字符串。所以,排序不會有幫助... –