按递增顺序排序整数的NSArray。我的代码有什么问题?

时间:2017-07-12 20:09:12

标签: objective-c sorting nsarray

import

int main(int argc, const char * argv[]) {
    @autoreleasepool { 

        NSArray *arr = [[NSArray alloc] initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10",@"11",@"12", nil];        
      arr = [arr sortedArrayUsingSelector:@selector(compare:options:)];
    }
    return 0;
}

输出为:1,10,11,12,2,3,4,5,6,7,8,9

有人可以帮助您按升序排序。

2 个答案:

答案 0 :(得分:3)

您正在排序字符串数组,而不是整数,因此这是正确的顺序。要使一个整数数组使用@ 1,@ 2等而不是@“1”,@“2”

实际上@ 1,@ 2创建NSNumber整数对象。 NSArray只能存储对象。

答案 1 :(得分:0)

正如@TheBasicMind在他的回答中所说,你有一个字符串数组,而不是一个整数数组。您按字符顺序排序字符串,而不是数字顺序。

基本思想使用NSNumbers数组的解决方案可能是更好的解决方案,因为它存储数值的数组而不是表示数值的字符串数组。

另一个解决方案是重写您的排序代码以使用使用字符串数值的字符串排序:

    NSArray *array = @[@"12", @"7", @"10", @"3", @"4", @"5",
                       @"6", @"1", @"8", @"9", @"2", @"11"];

    NSArray *sortedArray = [array sortedArrayUsingComparator: ^NSComparisonResult(
      NSString *string1,
      NSString *string2) {
        return [string1 compare: string2 options: NSNumericSearch];
    }];

    NSLog(@"Sorted array = %@", sortedArray);

产生以下输出:

Sorted array = (
    1,
    2,
    3,
    4,
    5,
    6,
    7,
    8,
    9,
    10,
    11,
    12
)