如何在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]; }
这对我有用