ios - 在IOS中使用NSSortDescriptor对数组(NSString + Number)进行排序?

标签 ios objective-c

我想使用 NSSortDescriptor 对数组进行排序。

这是我的代码

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

我得到的是这个不正确的结果。

  1. New Folder 1
  2. New Folder 11
  3. New Folder 12
  4. New Folder 2

预期

  1. New Folder 1
  2. New Folder 2
  3. New Folder 11
  4. New Folder 12

最佳答案

函数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]];

关于ios - 在IOS中使用NSSortDescriptor对数组(NSString + Number)进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17719307/

相关文章:

ios - 将核心数据上保存的数据填充到 tableView 上

ScrollView 高度中的 IOS Tableview

IOS:通过 tableView 导航并在下一个 View 中显示 TableView 数据

ios - 当 detailTextLabel 变为多行时,TextLabel 向上移动

ios - 从后台线程检索应用程序状态?

ios - 使用代码更改 UITableViewCell 的样式

ios - ipod 中的 Collectionview 问题

ios - 视觉格式化语言、按钮宽度和高度约束

javascript - PhoneGap打开原生 map

ios - 带约束的 Swift 圆形按钮