通过忽略空格对NSString的NSArray进行排序

时间:2013-03-27 03:57:33

标签: ios sorting nsarray

我有一个

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'的下一组对象,通过忽略空格,排序,'取消加入单词'并显示来加入单词。

1 个答案:

答案 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];
}];