NSSortDescriptor问题,排序单位和双位数

Uje*_*esh 0 arrays sorting xcode nssortdescriptor ios

我根据经验使用此代码对数组进行排序

sortexp = [NSSortDescriptor sortDescriptorWithKey: @"Experience" ascending:YES];

arrData = [arrData sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortexp]];

NSLog(@"%@",arrData);
[tblResponseData reloadData];     
NSLog(@"Experience");
Run Code Online (Sandbox Code Playgroud)

但问题是比较单个数字和两位数字时计数错误.

例子 - array = {10,3,11,35,6,7}在排序之后它会array = {10,11,3,35,6,7}

那么如何使用0带数字的前缀将我的单位数字转换为两位数,我的数据来自服务器所以我无法改变它所以我这样做是我的一面.

iHu*_*ulk 6

基本上这种情况正在发生,因为您将数字排序为字符串,因此它以这样的方式给出结果(3> 11表示它只比较第一个数字,如果第一个数字相同然后比较下一个数字),则不需要更改数字但是根据数字而不是字符串对它们进行排序.为此你应该使用

sortexp = [NSSortDescriptor sortDescriptorWithKey: @"Experience" ascending:YES selector:@selector(localizedStandardCompare:)];
Run Code Online (Sandbox Code Playgroud)

它会将您的数字与数字和字符串作为字符串进行比较.

编辑:

您也可以对使用块进行排序.

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

 if ([[obj1 valueForKey:@"Experience"] integerValue] > [[obj2 valueForKey:@"Experience"] integerValue]) {
      return (NSComparisonResult)NSOrderedDescending;
 }

 if ([[obj1 valueForKey:@"Experience"] integerValue] < [[obj2 valueForKey:@"Experience"] integerValue]) {
      return (NSComparisonResult)NSOrderedAscending;
 }
 return (NSComparisonResult)NSOrderedSame;
}];
Run Code Online (Sandbox Code Playgroud)