我根据使用此代码的经验对数组进行排序
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
将我的单位数转换为两位数,我的数据来自服务器所以我无法改变它所以我这样做是我的一面
答案 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;
}];