给数组NSMutableArray排序

4305次阅读  |  发布于5年以前

在iOS的Cocoa框架上,给NSMutableArray内容排序。

方法一,使用Comparator

Comparator是一个block,需要返回NSComparisonResult类型的值,NSComparisonResult也是一个枚举值,用来比较大小时用到。这个block里需要做的事就是你按照你的标准比较你的NSArray里的对象,根据你的标准返回一个NSComparisonResult的值,下面是示例:

NSMutableArray* arr = [NSMutableArrayarrayWithObjects:  
                           [NSNumber numberWithInt:0],  
                           [NSNumber numberWithInt:3],  
                           [NSNumber numberWithInt:2],  
                           [NSNumber numberWithInt:1],  
                           [NSNumber numberWithInt:7],  
                           [NSNumber numberWithInt:8],  
                           [NSNumber numberWithInt:9],  
                           [NSNumber numberWithInt:10],  
                           [NSNumber numberWithInt:6],  
                           [NSNumber numberWithInt:5],  
                           [NSNumber numberWithInt:4],  
                           nil];  

    // 升序  
    // 0 --> 10  
    [arr sortUsingComparator:^NSComparisonResult(__strong id obj1,__strong id obj2){  
        return [obj1 intValue] > [obj2intValue];  
    }];  

    NSLog(@"%@", [arrdebugDescription]);  

    // 降序  
    // 10 --> 0  
    [arr sortUsingComparator:^NSComparisonResult(__strongid obj1,__strong id obj2){  
        return [obj1 intValue] < [obj2intValue];  
    }];  
     NSLog(@"%@", [arrdebugDescription]);

方法二,使用Array元素本身的方法。

比如如果Array中都是NSString,而NSSString本身提供了compare方法,则直接使用即可,用法如下。

NSArray *array = @[@"abc",@"acc",@"adc",@"Abc",@"111"];

//compare:区分字母大小写
NSArray *testArr = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@",[testArr description]);

//caseInsensitiveCompare不区分大小写
NSArray *testArr2 =  [array sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSLog(@"%@",[testArr description]);

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8