这可能是一个简单的问题,但我不知道对有符号整数值数组进行排序的方法。
排序前我的数组,
pointsAry (-2,-7,-5,0,-3,2,-1,-4,1,3,-6)
使用后
NSArray * sortedArray = [pointsAry sortedArrayUsingComparator:^(id str1, id str2){
return [(NSString *)str1 compare:(NSString *)str2 options:NSNumericSearch];
}];
结果
sortedArray : (-1,-2,-3,-4,-5,-6,-7,0,1,2,3)
对于有符号值,sortedArray格式不正确,所以我需要
(-7,-6,-5,-4,-3,-2,-1,0,1,2,3)
如何按上述格式排序?提前谢谢。
答案 0 :(得分:5)
以下比较器避免创建临时NSNumber
对象:
NSArray *sortedArray = [pointsAry sortedArrayUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2) {
return my_int_compare([str1 intValue], [str2 intValue]);
}];
,其中
static inline int my_int_compare(int x, int y) { return (x > y) - (x < y); }
是一个辅助函数,它比较两个整数并返回-1,0或+1(根据需要) 对于比较器方法),使用
中的技术当然只会出现问题,因为数组包含NSString
个对象。
使用NSNumber
s将是更好的解决方案。
使用NSNumericSearch
选项无效,因为它不会处理减号
签字作为号码的一部分。
答案 1 :(得分:4)
NSArray *sortedArray = [pointsAry sortedArrayUsingComparator:^(NSString *str1, NSString *str2){
return [@([str1 intValue]) compare:@([str2 intValue])];
}];
答案 2 :(得分:0)
NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"P3",@"P1",@"P4",@"P10", nil];
NSMutableArray *num=[[NSMutableArray alloc]init];
for(int i=0;i<array.count;i++)
{
NSString *str=array[i];
[num addObject: [str substringFromIndex:1]];
}
NSArray *sortedArray = [num sortedArrayUsingComparator:^(NSString *str1, NSString *str2){
return [@([str1 intValue]) compare:@([str2 intValue])];
}];
[array removeAllObjects];
for(int i=0;i<sortedArray.count;i++)
{
NSString *newString = [NSString stringWithFormat:@"P%@",sortedArray[i]];
[array addObject:newString];
}
这对我有用