2013-07-18 54 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

好的,谢谢它适合我 –