0

我有一个

NSArray *foo = @[@"Chicago Hts, IL", @"Chicago Heights, IL", @"Chicago, IL"];

我想得到一个这样的排序数组:

@[@"Chicago, IL", @"Chicago Heights, IL", @"Chicago Hts, IL"];

我用了

[foo sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:),

这导致

@[@"Chicago Heights, IL", @"Chicago Hts, IL", @"Chicago, IL"];

该数组有大约 100k+ 个条目,因此根据空白空间拆分字符串并对其进行排序和“未拆分”会导致性能不佳。

我意识到 Finder 对文件的排序方式与“localizedCaseInsensitiveCompare”相同,所以我想我不走运。

我倾向于根据第一个字符“a”拆分数组,根据空白空间加入字符串,对其进行排序,然后在 tableView 中将其显示给用户,如果用户滚动超过第一组结果,获取“b”的下一组对象,通过忽略空格连接单词,排序,“取消连接单词”并显示。

4

1 回答 1

1

提供您自己的比较器:

NSArray *sorted = [foo sortedArrayUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {
    // Remove all spaces
    NSString *s1 = [str1 stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSString *s2 = [str2 stringByReplacingOccurrencesOfString:@" " withString:@""];

    return [s1 localizedCaseInsensitiveCompare:s2];
}];
于 2013-03-27T04:03:26.263 回答