最麻烦的是sortedArrayUsingSelector:
,其次是sortedArrayUsingDescriptors:
,最容易使用的就是sortedArrayUsingComparator:
从最容易使用的开始吧:
1 #pragma mark ----- 数组排序方式1:sortedArrayUsingComparator: 【block方式的排序是最简单的】 2 3 //原始数组 4 NSArray *array = @[@"b",@"a",@"x",@"o",@"0",@"g"]; 5 6 //排序数组 7 NSArray *sort = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 8 NSString *str1 = obj1; 9 NSString *str2 = obj2; 10 return [str1 compare:str2]; 11 }]; 12 13 //打印排序数组 14 [sort enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 15 MyLog(@"%@",obj); 16 }];
下面一行就解决了,太esay了
要对什么类型的对象排序,就用什么类型的对象接收就行了
是不是简单过头了呢.
请记住,用block排序是最简单的方式!
下面来试试sortedArrayUsingDescriptors:
这个方法.
sortedArrayUsingDescriptors:
一般用来给Model进行排序,block也能对Model进行排序.先给出Model的定义(看教程不要太懒,自己敲代码吧)
以下是排序的代码:
1 #pragma mark ------- 数组排序方式2:sortedArrayUsingDescriptors:给Model排序 2 3 //原始数组 4 NSArray *modelArray = @[[PersonModel name:@"YuanYuan" age:@22 height:165], 5 [PersonModel name:@"DaChao" age:@24 height:179], 6 [PersonModel name:@"XiaoMing" age:@12 height:155], 7 [PersonModel name:@"ZhangSan" age:@28 height:186], 8 [PersonModel name:@"GaoZeBing" age:@23 height:172]]; 9 10 11 //排序描述信息 12 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 13 NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; 14 NSArray *sortedArray = [modelArray sortedArrayUsingDescriptors:sortDescriptors]; 15 16 //打印排序信息 17 [sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 18 PersonModel *tmp = obj; 19 MyLog(@"%@",tmp.name); 20 }];
看下图,其实呢,NSSortDescriptor只是一个获取keyPath的工具,他能根据keyPath进行排序而已,仅此而已:)
看一下打印信息
2014-07-04 11:09:00.494 NSArraySorted[1784:60b] DaChao 2014-07-04 11:09:00.496 NSArraySorted[1784:60b] GaoZeBing 2014-07-04 11:09:00.496 NSArraySorted[1784:60b] XiaoMing 2014-07-04 11:09:00.496 NSArraySorted[1784:60b] YuanYuan 2014-07-04 11:09:00.497 NSArraySorted[1784:60b] ZhangSan
很easy吧.
这种东西还是封装成类目比较好的样子.
使用:
1 //原始数组 2 NSArray *modelArray = @[[PersonModel name:@"YuanYuan" age:@22 height:165], 3 [PersonModel name:@"DaChao" age:@24 height:179], 4 [PersonModel name:@"XiaoMing" age:@12 height:155], 5 [PersonModel name:@"ZhangSan" age:@28 height:186], 6 [PersonModel name:@"GaoZeBing" age:@23 height:172]]; 7 NSArray *sortedChangeArray = [modelArray sortedWithKeyPath:@"age" ascending:YES]; 8 9 [sortedChangeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 10 PersonModel *tmp = obj; 11 MyLog(@"%@",tmp.age); 12 }]; 13
一句话就能实现排序,多简单:),开发就得隐藏不必要的繁文缛节,减少不必要的干扰才是正道.
第三种方法sortedArrayUsingSelector:
,也许是你最常用的方法,这个我就不讲了,我觉得太麻烦了,还得另外写一个比较的方法......
总结:
==本人倾向于这么用==
1. 优先用block排序
2. 用NSSortDescriptor的keyPath排序
3. 再不济请用sortedArrayUsingSelector:
方法排序