我有一个
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'的下一组对象,通过忽略空格,排序,'取消加入单词'并显示来加入单词。
答案 0 :(得分: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];
}];