0

可能重复:
如何对 NSArray 进行自然排序?

我有一个看起来像这样的数组:4.value、8.value、1.value、3.value、5.value 等,有无限的对象。

有没有办法将此数组从 1 排序到最后一个数字?所以:

1.价值,2.价值,3.价值......

谢谢!

4

2 回答 2

3

我不清楚数组中对象的类型是什么,因此您需要更改以下代码以适合您的类型,但这通常是您对数组进行排序的方式:

        NSMutableArray* array = [[NSMutableArray alloc] init];
    [array addObject:@"3.value"];
    [array addObject:@"1.value"];       
    [array addObject:@"4.value"];
    [array addObject:@"2.value"];               
    NSArray* sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
        // Write whatever comparison code is appropriate for your objects here
        // The following will only work for simple strings
        return [obj1 caseInsensitiveCompare:obj2];
    }];     
    NSLog(@"%@", sortedArray);

编辑: 如果您使用字符串并且字符串总是被格式化,以便它们采用以下形式:“Integer.String”,您应该使用以下代码对数组进行排序:

    NSArray* sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
        NSInteger left = [obj1 integerValue];
        NSInteger right = [obj2 integerValue];

        if (left > right) {
            return NSOrderedDescending;
        }   

        if (left < right) {
           return NSOrderedAscending;
        }

        return NSOrderedSame;
    }];

如果您只是比较字符串,它们将按第一个字符排序,因此 @"123.value" 将排在 "9.value" 之前

于 2012-12-25T13:15:57.127 回答
1
NSArray *sortedarray = [[YourArray allObjects]
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSLog(@"%@",sortedarray);
于 2012-12-25T13:52:22.670 回答