以这种方式对NSMutableArray进行排序

时间:2012-12-25 11:34:14

标签: objective-c nsmutablearray

  

可能重复:
  How to do a natural sort on an NSArray?

我有一个如下所示的数组: 4.value,8.value,1.value,3.value,5.value等,具有无限制的对象。

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

1.value,2.value,3.value .....

谢谢!

2 个答案:

答案 0 :(得分: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”之前出现

答案 1 :(得分:1)

NSArray *sortedarray = [[YourArray allObjects]
sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSLog(@"%@",sortedarray);