iOS-数组排序

首先提供一些排序文章供大家参考学习
常用排序算法总结
iOS-八大基本排序
Sort 各类算法和时间复杂度分析


关于iOS中,我们有自己的"sort”尚方宝剑,主要涉及的有NSComparisonResult和compare

NSComparisonResult
typedef NS_CLOSED_ENUM(NSInteger, NSComparisonResult) {
    NSOrderedAscending = -1L,
    NSOrderedSame,
    NSOrderedDescending
};

NSComparisonResult 是一个枚举类型里面包含三个值
NSOrderedAscending = -1L,表示两个比较的对象前者小于后置
NSOrderedSame, 表示比较的对象相等
NSOrderedDescending表示两个比较的对象前者大于后者

compare:

字符串比较大小的函数,返回NSComparisonResult

使用NSComparator排序

数组排序方法(升序)

- (void)arraySortASC {
    // 数组排序
    // 定义一个数字数组
    NSArray *array = @[@(3),@(4),@(2),@(1)];
    // 对数组进行排序
    NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
        NSLog(@"%@~%@",obj1,obj2); // 3~4 2~1 3~1 3~2
        return [obj1 compare:obj2]; // 升序
    }];
    
    NSLog(@"result=%@",result);
}

数组排序方法

- (void)arraySortDESC {
    // 数组排序
    // 定义一个数字数组
    NSArray *array = @[@(3),@(4),@(2),@(1)];
    // 对数组进行排序
    NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
        NSLog(@"%@~%@",obj1,obj2); // 3~4 2~1 3~1 3~2
        return [obj2 compare:obj1]; // 降序
    }];
    
    NSLog(@"result=%@",result);
}

数组排序方法(乱序)

- (void)arraySortBreak {
    // 数组排序
    // 定义一个数字数组
    NSArray *array = @[@(3),@(4),@(2),@(1),@(5),@(6),@(0)];
    // 对数组进行排序
    NSArray *result = [array sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
        NSLog(@"%@~%@",obj1,obj2);
        // 乱序
        
        if (arc4random_uniform(2) == 0) {
            return [obj2 compare:obj1]; // 降序
        } else {
            return [obj1 compare:obj2]; // 升序
        }
    }];
    
    NSLog(@"result=%@",result);
}
使用NSDescriptor排序(NSSet,NSArray,NSMutableArray)

单关键字排序

NSMutableArray *array = [NSMutableArray array];    
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES];
[array sortUsingDescriptors:[NSArray arrayWithObject:sort]]; 

多关键字排序

NSMutableArray *array = [NSMutableArray array];  
......  
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"key1" ascending:YES];  
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"key2" ascending:NO];  
[array sortUsingDescriptors:[NSArray arrayWithObjects:sort1, sort2, nil]];

其中ascending为YES表示升序排列
详细也可看这篇文章分享 iOS浅析排序规则描述类: NSSortDescriptor

你可能感兴趣的:(iOS-数组排序)