1

我想按升序对具有多个数字的整数数组进行排序。

这是我的数组:

keyArray:
(
   978,
   1077,
   1067,
   1076,
   1072,
   1082,
   1079,
   1075,
   1071,
   1081,
   1078,
   1080,
   1074

)

这是我的代码:

NSSortDescriptor *sortOrder = [NSSortDescriptor sortDescriptorWithKey:@"self"  ascending: YES];

NSArray *sortedArray2 = [keyArray sortedArrayUsingComparator:^(id str1, id str2) {

    if ([str1 integerValue] < [str2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([str1 integerValue] > [str2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

NSLog(@"%@",[keyArray sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortOrder]]);

问题是这将像这样对数组进行排序

sortedArray: (

  1067,
  1071,
  1072,
  1074,
  1075,
  1076,
  1077,
  1078,
  1079,
  1080,
  1081,
  1082,
  978
)

它将首先对四位数进行排序,然后对三位数进行排序。

4

2 回答 2

8

你可以很容易地实现你想要的,试试这个:

NSArray * sortedArray2 = [keyArray sortedArrayUsingComparator:^(id str1, id str2){
    return [(NSString *)str1 compare:(NSString *)str2 options:NSNumericSearch];
}];
于 2012-04-27T08:01:42.623 回答
0
NSInteger firstNumSort(id str1, id str2, void *context) {
int num1 = [str1 integerValue];
int num2 = [str2 integerValue];

if (num1 < num2)
    return NSOrderedAscending;
else if (num1 > num2)
    return NSOrderedDescending;

return NSOrderedSame;
}

// 当你想短路它时调用它...

NSArray *array = [NSArray arrayWithObjects:@"787",
                  @"344",
                  @"42334",
                  @"23432",
                  @"3423432",
                  nil];

NSLog(@"Sorted: %@", [array sortedArrayUsingFunction:firstNumSort context:NULL]);

有关更多信息,请访问此参考...

希望对你有帮助...

于 2012-04-27T07:53:04.427 回答