簡單的字符串等排序
方式一:
NSArray *arr = @[@"Cecilia",@"Abbado",@"Baade"];
NSArray *sortArr = [arr sortedArrayUsingSelector:@selector(compare:)];
for (NSString *str in sortArr) {
NSLog(@"%@",str);
}
同樣不僅僅是字符串類型,NSNumber 效果也不錯哦
方式二 :
NSArray *arr = @[@2,@5,@1];
NSArray *sortArr = [arr sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
return [(NSNumber *)obj1 compare:(NSNumber *)obj2];
}];
可以看到 是升序的。 默認的我們可以試一下這三個枚舉,發(fā)現(xiàn)是NSOrderedDescending
會不會有人覺得NSOrderedDescending是降序 牵祟,為什么 最后是 1 2 5 這個升序的結果?
因為這邊是拿obj1 compare obj2抖格,即用前者比較的后者诺苹,不是后者比較的前者
如果邏輯覺得不舒服,可以拿obj2 compare obj1 就是你想看到的效果了
對象的排序(稍微高級點)
一.首先定義對象
Person.h
@interface Person : NSObject
@property (nonatomic,copy) NSString *name;
@property (nonatomic,assign) int age;
@property (nonatomic,strong) NSNumber *weight;
-(instancetype)initWithName:(NSString *)name Age:(int)age Weight:(NSNumber *)weight;
Person.m
@implementation Person
-(instancetype)initWithName:(NSString *)name Age:(int)age Weight:(NSNumber *)weight{
if (self = [super init]) {
_name = name;
_age = age;
_weight = weight;
}
return self;
}
-(NSString *)description{
return [NSString stringWithFormat:@"名字%@==年紀%d==體重%@",_name,_age,_weight];
}
@end
//創(chuàng)建對象
Person *p1 = [[Person alloc]initWithName:@"Cecilia" Age:20 Weight:@(80)];
Person *p2 = [[Person alloc]initWithName:@"Abbado" Age:8 Weight:@(65)];
Person *p3 = [[Person alloc]initWithName:@"Baade" Age:25 Weight:@(70)];
NSArray *arr = @[p1,p2,p3];
二.開始排序
方式一:
NSArray *sortArr = [arr sortedArrayUsingComparator:^NSComparisonResult(Person *obj1, Person *obj2) {
return [obj1.name compare:obj2.name] == NSOrderedDescending;
}];
for (Person *p in sortArr) {
NSLog(@"%@",p);
}
方式二:
NSSortDescriptor *age_sort = [[NSSortDescriptor alloc]initWithKey:@"age" ascending:NO]; //NO代表降序他挎,YES升序
NSArray *sortArr = [arr sortedArrayUsingDescriptors:@[age_sort]];
for (Person *p in sortArr) {
NSLog(@"%@",p);
}
我們注意到sortedArrayUsingDescriptors后面跟的參數(shù)是數(shù)組 ,就是多條件排序筝尾。那我們試一下
NSSortDescriptor *age_sort = [[NSSortDescriptor alloc]initWithKey:@"age" ascending:NO]; //NO代表降序,YES升序
NSSortDescriptor *name_sort = [[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES]; //NO代表降序办桨,YES升序
NSArray *sortArr = [arr sortedArrayUsingDescriptors:@[age_sort,name_sort]];
for (Person *p in sortArr) {
NSLog(@"%@",p);
}
我們更改一下age_sort 和 name_sort的 位置
我們看到兩者打印效果是不同的筹淫,先后順序代表著排序時候的優(yōu)先順序
有了這么個方法 ,再也不用自己吭哧吭哧了呢撞,蘋果爸爸已經幫我們寫好了损姜,從此媽媽再也不用擔心我的排序