我正在开发一个有40k +联系人的联系人应用程序。
在列表视图中,我根据联系人数据显示索引标题A-Z。
现在我需要根据这些标题过滤联系人。
我目前的方法是花费大约10-15秒来完成这项工作,我想知道是否有一种有效的方法可以减少这段时间。
RLMResults *results = [RealmContact allObjects];
NSMutableArray *tempData = [NSMutableArray array];
for (NSString *sectionHeader in titleArr){
if ([sectionHeader isEqualToString:@"#"]) {
if (searchQuery.length>0) {
RLMResults *contactResults = [results objectsWhere:[NSString stringWithFormat:@"(%@ == '' or %@ == null)",searchQuery,searchQuery]];
[tempData addObject:[contactResults sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithKeyPath:searchQuery ascending:YES],[RLMSortDescriptor sortDescriptorWithKeyPath:@"firstName" ascending:YES],[RLMSortDescriptor sortDescriptorWithKeyPath:@"lastName" ascending:YES]]]];
}
}else{
NSCharacterSet * set = [[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLKMNOPQRSTUVWXYZ0123456789"] invertedSet];
if ([sectionHeader rangeOfCharacterFromSet:set].location == NSNotFound) {
if (sectionHeader.length>0 && searchQuery.length>0) {
RLMResults *contactResults = [results objectsWhere:[NSString stringWithFormat:@"%@ BEGINSWITH[c] '%@'",searchQuery,sectionHeader]];
[tempData addObject:[contactResults sortedResultsUsingDescriptors:@[[RLMSortDescriptor sortDescriptorWithKeyPath:searchQuery ascending:YES],[RLMSortDescriptor sortDescriptorWithKeyPath:@"firstName" ascending:YES],[RLMSortDescriptor sortDescriptorWithKeyPath:@"lastName" ascending:YES]]]];
}
}
}
}
_dataSource = [tempData copy];
dispatch_async(dispatch_get_main_queue(), ^{
[self.tableView reloadData];
});
titleArr是按字母数字#,A,B,C ... Z
排序的数组其中'#'部分包含名字或姓氏为nil的联系人。
'A'部分包含名字以字母“A”开头的联系人。