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带数字的前缀将我的单位数字转换为两位数,我的数据来自服务器所以我无法改变它所以我这样做是我的一面.
基本上这种情况正在发生,因为您将数字排序为字符串,因此它以这样的方式给出结果(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)