2013-03-27 180 views
0

我有一個排序忽略空格

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

我希望得到一個有序數組這樣一個NSString的NSArray的:

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

我用

[foo sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:), 

導致在

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

這個數組有大約100k條目,所以根據空格分割字符串,並對它進行排序和'未分割'會導致不良的perforamnce。

我意識到Finder以與'localizedCaseInsensitiveCompare'相同的方式排序文件,所以我想我運氣不好。

我傾向於基於第一個字符'a'拆分數組,根據空白處加入字符串,對其進行排序,然後在tableView中將其顯示給用戶,並且如果用戶滾動經過第一個字符結果集,獲取'b'的下一組對象,通過忽略空白空間,排序,'取消加入單詞'並顯示來加入單詞。

回答

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]; 
}]; 
+0

雖然這段代碼完美的作品,我轉而使用爲const char和做的焦炭相比,這稍微快一點是,當我在模擬器上運行它(一個char〜 .5到1秒更快)。我也將數組分成塊,所以在任何時候,我都沒有10萬條記錄。感謝您的幫助。 – newDeveloper 2013-03-30 13:23:25