2013-07-18 77 views
1

我想使用NSSortDescriptor對數組進行排序。在IOS中使用NSSortDescriptor對數組進行排序(NSString + Number)?

這裏是我的代碼

NSSortDescriptor *descriptor=[[NSSortDescriptor alloc] initWithKey:@"filename" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; 
[arrDocuments sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; 

我得到的是這種不正確的結果。

  1. 新文件夾1
  2. 新文件夾11
  3. 新文件夾12
  4. 新文件夾2

預期

  1. 新文件夾1
  2. 新文件夾2
  3. 新文件夾11
  4. 新文件夾12
+0

您使用的字母排序。你需要一個字母數字排序。 – Fogmeister

+0

新文件夾對於每個文件名都是靜態的? –

+0

不,它會改變.. –

回答

8

功能localizedCaseInsensitiveCompare:是字母搜索。

你會使用這樣的函數更好......

compare:options: 

隨着選項NSNumericSearch這把任何數字作爲數字等對其進行排序1,2,10,等等

按字母順序排列,但10之前2來因此你的問題。

整個代碼看起來像...

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"fileName" ascending:YES comparator:^(NSString *obj1, NSString *obj2) { 

    return [obj1 compare:obj2 options:NSNumericSearch | NSCaseInsensitiveSearch]; 

}]; 

[arrDocuments sortUsingDescriptors:@[sd]]; 
+0

我希望這兩個caseInsensitive以及NSNumericSearch .. –

+0

編輯,以顯示如何使用兩者。 – Fogmeister

+0

好的,謝謝它適合我 –