NSSortDescriptor排序

简介

NSSortDescriptor 可以用于对数组的排序, 可对普通数组进行简单排序, 也可以按照指定的对象的属性(或者字典的 key 值)对对象数组(或字典数组)进行排序。排序的方法分为正序和倒序两种.

方法

排列数组分为对 NSSet, NSArray, NSMutableArray,NSOrderedSet,NSMutableOrderedSet的排序, 这里只讲对数组的排序:
不可变数组方法:
-(NSArray *)sortedArrayUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors;
可变数组方法:
-(void)sortUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors;

简单数组排序

这里的简单数组是指数组元素为简单对象的数组, 如下面的存储着字符串对象, 或者NSNumber 等的数组.
简单数组排序 descriptionKey 可以为 nil 就能够将顺序排列好.

	NSMutableArray *numArr = [[NSMutableArray alloc] init];
    [numArr addObject:@"2"];
    [numArr addObject:@"1"];
    [numArr addObject:@"3"];
    
    NSSortDescriptor *sd_num = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO];
    NSArray *arr1 = [numArr sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sd_num, nil]];
    
    for (NSString *str in arr1) {
        NSLog(@"%@", str);
    }

    NSMutableArray *letterArr = [[NSMutableArray alloc] init];
    [letterArr addObject:@"b"];
    [letterArr addObject:@"c"];
    [letterArr addObject:@"a"];
    
    NSSortDescriptor *sd_letter = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
    NSArray *arr2 = [letterArr sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sd_letter, nil]];
    
    for (NSString *str in arr2) {
        NSLog(@"%@", str);
    }

打印结果:
这里写图片描述

字典数组排序

如果是Employee对象或者字典数组, 就需要按照key 值来排序.

 NSMutableArray *nameArr = [[NSMutableArray alloc] init];
    
    NSMutableDictionary *person1 = [[NSMutableDictionary alloc] init];
    [person1 setObject:@"zhangsan" forKey:@"name"];
    NSMutableDictionary *person2 = [[NSMutableDictionary alloc] init];
    [person2 setObject:@"lisi" forKey:@"name"];
    NSMutableDictionary *person3 = [[NSMutableDictionary alloc] init];
    [person3 setObject:@"wangwu" forKey:@"name"];
    [nameArr addObject:person1];
    [nameArr addObject:person2];
    [nameArr addObject:person3];

    NSSortDescriptor *sd_name = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    NSArray *arr3 = [nameArr sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sd_name, nil]];
    
    for (NSMutableDictionary *md in arr3) {
        NSLog(@"%@", [md objectForKey:@"name"]);
    }

打印结果:
这里写图片描述

iOS 中,可以使用 `NSSortDescriptor` 类来对 `UITableView` 中的数据进行排序。以下是一个示例,假设我们有一个包含 `Person` 对象的数组 `peopleArray`,每个 `Person` 对象都有一个 `name` 属性和一个 `age` 属性。 首先,我们需要创建一个 `NSSortDescriptor` 对象来指定我们要按照哪个属性进行排序: ```swift let nameSortDescriptor = NSSortDescriptor(key: "name", ascending: true) let ageSortDescriptor = NSSortDescriptor(key: "age", ascending: true) ``` 上面的代码创建了两个 `NSSortDescriptor` 对象,一个按照 `name` 属性升序排序,另一个按照 `age` 属性升序排序。 接下来,我们需要将这些 `NSSortDescriptor` 对象传递给 `sortedArray(using:)` 方法来对数组进行排序。在这个例子中,我们将使用 `nameSortDescriptor` 对数组进行排序: ```swift let sortedPeopleArray = (peopleArray as NSArray).sortedArray(using: [nameSortDescriptor]) as! [Person] ``` 上面的代码将 `peopleArray` 数组按照 `name` 属性升序排序,结果存储在 `sortedPeopleArray` 数组中。如果你想按照多个属性排序,只需将 `NSSortDescriptor` 对象放入数组中即可: ```swift let sortedPeopleArray = (peopleArray as NSArray).sortedArray(using: [nameSortDescriptor, ageSortDescriptor]) as! [Person] ``` 上面的代码将 `peopleArray` 数组按照 `name` 属性升序排序,如果有相同的 `name` 属性,则按照 `age` 属性升序排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值