2013-11-14 72 views
3

所以我有以下代碼:NSArray的字符串這類問題

NSArray *pathArray = @[@"path/Documents/page9.png", 
    @"path/Documents/page8.png", 
    @"path/Documents/page10.png", 
    @"path/Documents/page11.png", 
    @"path/Documents/page0.png", 
    @"path/Documents/page12.png", 
    @"path/Documents/page6.png", 
    @"path/Documents/page4.png", 
    @"path/Documents/page5.png", 
    @"path/Documents/page1.png", 
    @"path/Documents/page7.png", 
    @"path/Documents/page3.png", 
    @"path/Documents/page2.png"]; 

如果我現在數組使用排序:

[pathArray sortUsingSelector:@selector(caseInsensitiveCompare:)]; 

對數組進行排序錯誤的方式

結果:

pathArray: (
    "path/Documents/page0.png", 
    "path/Documents/page1.png", 
    "path/Documents/page10.png", 
    "path/Documents/page11.png", 
    "path/Documents/page12.png", 
    "path/Documents/page2.png", 
    "path/Documents/page3.png", 
    "path/Documents/page4.png", 
    "path/Documents/page5.png", 
    "path/Documents/page6.png", 
    "path/Documents/page7.png", 
    "path/Documents/page8.png", 
    "path/Documents/page9.png"} 

The eleme組件"page10.png", "page11.png" and "page12.png"的nts應該是最後三個元素。是否存在其他選擇器來解決這個問題?

如果不是如何做到這一點?

+0

或[我有一個NSArray上的NSString的,但一些字符串只是數字。如何正確排序數字?](http://stackoverflow.com/questions/7375561/i-have-an-nsarray-on-nsstrings-but-some-of-the-strings-are-only-numbers-how -d),[如何對NSArray進行自然排序?](http://stackoverflow.com/questions/2846301/how-to-do-a-natural-sort-on-an-nsarray) –

回答

4

您可以使用此實現自己的比較方法:

[pathArray sortUsingComparator:^(id one, id two) { 
    return [one compare:two options:NSCaseInsensitiveSearch | NSNumericSearch]; 
} 
+3

+1。好發現 - 我不知道這件事。 – trojanfoe

+1

是否可以更改文件名的一個固定解決方案。 –

+1

+1更簡單,更清潔。 –

1

這是因爲你的文件名不一致,例如:

path/Documents/page0.png 

應該是:

path/Documents/page00.png 

,每一個文件都有2位數。一旦你解決這個問題,你的排序將正常工作。

+0

我不dont認爲解決方案應該來自更改文件名,他可能無法做到這一點 –

+0

@AntonioMG這取決於限制是什麼。如果這是我的項目,那麼我會更加一致。但是,如果文件名不能更改,我更喜歡你的答案。 – trojanfoe

+0

你的回答也是正確的,我不知道這會保存問題。 – pmk