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

时间:2014-10-06 06:27:31

标签: ios arrays xcode sorting nssortdescriptor

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

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

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

NSLog(@"%@",arrData);
[tblResponseData reloadData];     
NSLog(@"Experience");

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

示例 - array = {10,3,11,35,6,7},排序后array = {10,11,3,35,6,7}

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

1 个答案:

答案 0 :(得分:8)

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

sortexp = [NSSortDescriptor sortDescriptorWithKey: @"Experience" ascending:YES selector:@selector(localizedStandardCompare:)];

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

修改

您也可以使用块排序。

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;
}];