如何在iOS中对有符号数组进行sorting?

这可能是一个简单的问题,但我不知道如何对有符号整数值进行sorting。

我的数组在sorting之前,

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) 

如何sorting像上面的格式? 提前致谢。

 NSArray *sortedArray = [pointsAry sortedArrayUsingComparator:^(NSString *str1, NSString *str2){ return [@([str1 intValue]) compare:@([str2 intValue])]; }]; 

下面的比较器避免了创build临时的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(根据比较方法的要求),使用

  • C / C ++中是否有标准符号函数(signum,sgn)? 。

当然,这个问题只是因为数组包含了NSString对象而产生的。 使用NSNumber将是更好的解决scheme。

使用NSNumericSearch选项没有帮助,因为它不会将减号视为数字的一部分。

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

这对我有用