+ (instancetype)sortDescriptorWithKey:(nullable NSString *)key ascending:(BOOL)ascending API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
+ (instancetype)sortDescriptorWithKey:(nullable NSString *)key ascending:(BOOL)ascending selector:(nullable SEL)selector API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
参数解析:
key : 排序key, 某个对象的属性名称
ascending : 是否升序, YES-升序, NO-降序
selector : SEL选择器,自定义排序规则, 如果需要自己定义排序规则, 可传递此方法 (自定义方法的返回值为NSComparisonResult).
单个字段排序示例:
// 排序key, 某个对象的属性名称,是否升序, YES-升序, NO-降序
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
// 排序结果
NSArray *resultArr = [self.detailModel.areas sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
其中@"name"即为模型里需要作为排序的字段,resultArr即为排序之后的结果。
多个字段排序示例:
// 排序key, 某个对象的属性名称,是否升序, YES-升序, NO-降序
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"num" ascending:NO];
// 排序结果
self.resultArr = [self.detailModel.areas sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor, sortDescriptor1, nil]];
待比较的属性是字符串(NSString)类型,也可以用带SEL的方法初始化。
//创建排序规则NSSortDescriptor
//key :按照name属性 升序排序 SEL选择器使用其默认的方法: localizedStandardCompare:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(localizedStandardCompare:)];
//给数组添加排序规则
NSArray *resultArr = [self.detailModel.areas sortedArrayUsingDescriptors:@[sort]];
排序规则描述类: NSSortDescriptorNSSortDescriptor来指定排序规则, 对集合等进行排序时指定结果的排序规则; 可以对一个类的某个属性(下文中方法中的key参数)指定排序规则; 可以对一个字符串集合进行指定排序规则,把参数key赋值为nil就行。NSSet、NSArray、NSOrderedSet、NSMutableArray、NSMutableOrderedSet均有相应方法使用,参数都是包含NSSortDescriptor的数组, 意味着我们可以同时指定多条规.
转载自:https://www.jianshu.com/p/3e9f0884be6b
NSSortDescriptor是用来指定排序规则, 对集合等进行排序时指定结果的排序规则;
他可以对一个类的某个属性(下文中方法中的key参数)指定排序规则, 也可以对一个字符串集合进行指定排序规则, 这时, 只需要把参数key赋值为nil即可.
iOS中的集合都有相应的扩展方法来使用NSSortDescri...
NSMutableArray *ma1 =[[NSMutableArray alloc] init];
[ma1 addObject:@"2"];
[ma1 addObject:@"1"];
[ma1 addObject:@"3"];
NSSortDescriptor *
如果是Employee对象需要按照name来排序,就生成下面的descriptor
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:name ascending:YES];
如果需要多个排序,比如先按name排序,再按
简单的说NSSortDescriptor就是去创建一个排序条件,初始化中需要指定按照数组中对象通过什么属性进行排序,升序或者降序。可以理解为一个排序规则的描述者。
@autoreleasepool {
// insert code here...
//简单排序,key 设置为nil
NSArray *dataArray = [NSArray arrayWithObjects:@"a", @"c", @"z", @"b", @"x", @"y", nil
21 Foundation框架之NSSet、NSMutableSet、NSCountedSet、NSOrderedSet、NSMutableOrderedSetTags: Objective-C
NSSet:集合。是NSObject的子类,跟NSArray不一样在于,NSArray的元素是有序的,可以通过索引访问,而NSSet的元素是无序的,不能通过索引访问;NSArray的元素可以是重复的,而NS
NSSortDescriptor 是什么 ?
你可以将它看做是对一个排序规则的描述者 因为我们可以使用它来对我们数组中的对象进行排序操作
假设现在有这样一个需求: 数组里面有十个Person对象 每一个Person对象有自己的名字年龄和分数 我们需要对数组里面的这十个对象做排序操作 规则如下:
1.首先按照年龄排序
2.如果年龄相同按照分数排序
要实现这...
@interface Person : NSObject
@property NSString *firstName;
@property NSString *lastName;
@property NSNumber *age;
@implementation Person
- (NSString *)description {