ios过滤表数据按​​字母顺序排列

时间:2017-11-24 14:05:04

标签: ios objective-c realm

我正在开发一个有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”开头的联系人。

0 个答案:

没有答案