一个数组内是对象类型.想根据对象内的属性进行排序.
很多人第一想到的是利用谓词.其实数组自带了一个更简便的方法便于我们进行排序
- (void)sortUsingComparator:(NSComparator NS_NOESCAPE)cmptr NS_AVAILABLE(10_6, 4_0);
举例.
定义一个 Person 对象
@interface Person : NSObject
@property (nonatomic, copy) NSString *name;
@property(nonatomic,readwrite)int weight;
@end
使用方法
Person *person1 =[[Person alloc]init];
Person *person2 =[[Person alloc]init];
Person *person3 =[[Person alloc]init];
person1.weight =1;
NSMutableArray *array =[[NSMutableArray alloc]init];
[array addObject:person1];
person2.weight =3;
[array addObject:person2];
person3.weight =2;
[array addObject:person3];
for (Person *p in array) {
NSLog(@"排序前%d",p.weight);
}
[array sortUsingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
return [@(obj1.weight) compare:@(obj2.weight)];
}];
for (Person *p in array) {
NSLog(@"排序后%d",p.weight);
}
打印日志为:
2017-05-27 17:20:51.382 Demo[18726:662926] 排序前1
2017-05-27 17:20:51.383 Demo[18726:662926] 排序前3
2017-05-27 17:20:51.383 Demo[18726:662926] 排序前2
2017-05-27 17:20:51.383 Demo[18726:662926] 排序后1
2017-05-27 17:20:51.383 Demo[18726:662926] 排序后2
2017-05-27 17:20:51.383 Demo[18726:662926] 排序后3
是不是感觉很方便?所以多看看系统定义的方法对我们提高效率非常有用
另外分享一些常用 OC 排序方法:
1).不可变数组
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr;