iOS-数组排序

作者: 琦玉老师很强 | 来源:发表于2020-08-10 09:33 被阅读0次

首先提供一些排序文章供大家参考学习
常用排序算法总结
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-数组排序

    需求: 需要对数组noReadArray按照最后的时间lastTimej进行排序 实现方式: 使用场景: 1、需要...

  • iOS-数组排序

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

  • iOS 各种排序

    数组排序 数组中字典排序 数组中字典按照某个value排序 排序方法

  • Java 数组的排序、逆序

    数组的排序、逆序测试数据 数组选择排序 数组冒泡排序 数组逆序

  • java 数组和list排序

    数组排序 其中有数组排序和数组对象排序 数组一些数字排序则直接用Arrays.sort()加数组就可以。数组对象则...

  • 数组

    数组的遍历 数组是值类型 数组的排序 冒泡排序 多维数组

  • 2018-01-14

    php数组排序 sort() - 以升序对数组排序 rsort() - 以降序对数组排序 asort() - 根据...

  • PHP排序算法

    排序算法 冒泡排序(数组排序) 快速排序(数组排序) 参考 http://www.cnblogs.com/enia...

  • 算法记录

    快速排序 基本算法: 归并排序讲数组分为两个子数组分别排序,并将有序的子数组归并使得整个数组排序; 快速排序通过一...

  • 选择排序

    选择排序 调用选择排序 生成数组 打印输出排序数组

网友评论

    本文标题:iOS-数组排序

    本文链接:https://www.haomeiwen.com/subject/qruddktx.html