关于NSArray的几种排序:
2016-01-11 11:59
411 查看
#利用数组的sortedArrayUsingComparator调用
NSComparator
当中NSComparator事实上就是一个返回NSComparisonResult的block。
typedef NSComparisonResult (^NSComparator)(id obj1,
id obj2); 当中obj1、obj2事实上是NSArray中的元素
#[b]利用数组的sortedArrayUsingFunction 调用 相应方法customSort[/b]
[b]#利用数组的[/b]sortedArrayUsingSelector调用
相应的SEL的方法
注意selector的方法是对数组元素而言的方法,假如数据元素没有compare:方法。能够通过扩展数组元素的类添加对应的方法。
由于数组中元素相应的是字典,所以对字典的类进行扩展
[b]#利用数组的[b]sortUsingDescriptors调用NSSortDescriptor[/b][/b]
NSSortDescriptor 能够简单的理解为 指定对象的某属性的比較描写叙述。
NSComparator
当中NSComparator事实上就是一个返回NSComparisonResult的block。
typedef NSComparisonResult (^NSComparator)(id obj1,
id obj2); 当中obj1、obj2事实上是NSArray中的元素
resultArray = [arrayDic <span style="color:#009900;">sortedArrayUsingComparator:</span>^NSComparisonResult(id obj1, id obj2) { NSNumber * number1 = [[obj1 allKeys] objectAtIndex:0]; NSNumber * number2 = [[obj2 allKeys] objectAtIndex:0]; NSComparisonResult result = [number1 compare:number2]; return result == NSOrderedAscending; }];
#[b]利用数组的sortedArrayUsingFunction 调用 相应方法customSort[/b]
NSInteger <span style="color:#ff9900;">sortByID</span>(id obj1, id obj2, void *context){ NSString *str1 =(NSString*) obj1; // ibj1 和 obj2 来自与你的数组中,事实上,个人认为是苹果自己实现了一个冒泡排序给大家使用 NSString *str2 =(NSString *) obj2; if (str1.length < str2.length) { <span style="white-space:pre"> </span>return NSOrderedDescending; } else if(str1.length == str2.length) { <span style="white-space:pre"> </span>return NSOrderedSame; } <span style="white-space:pre"> </span>return NSOrderedAscending; }
NSArray *sortedArray =[arr sortedArrayUsingFunction:sortByID context:nil];
[b]#利用数组的[/b]sortedArrayUsingSelector调用
相应的SEL的方法
注意selector的方法是对数组元素而言的方法,假如数据元素没有compare:方法。能够通过扩展数组元素的类添加对应的方法。
NSMutableArray *arrayDic = [NSMutableArray arrayWithObjects: [NSDictionary dictionaryWithObjectsAndKeys:@"Obj0", [NSNumber numberWithInt:0], nil], [NSDictionary dictionaryWithObjectsAndKeys:@"Obj5", [NSNumber numberWithInt:5], nil], [NSDictionary dictionaryWithObjectsAndKeys:@"Obj2", [NSNumber numberWithInt:2], nil], [NSDictionary dictionaryWithObjectsAndKeys:@"Obj3", [NSNumber numberWithInt:3], nil], [NSDictionary dictionaryWithObjectsAndKeys:@"Obj1", [NSNumber numberWithInt:1], nil], [NSDictionary dictionaryWithObjectsAndKeys:@"Obj4", [NSNumber numberWithInt:4], nil], nil]; #ifdef sortedArrayUsingSelector resultArray = [arrayDic sortedArrayUsingSelector:@selector(compare:)];
由于数组中元素相应的是字典,所以对字典的类进行扩展
@implementation NSDictionary (extend) - (NSComparisonResult)compare: (NSDictionary *)otherDictionary { NSNumber *number2 = [[otherDictionary allKeys] objectAtIndex:0]; NSDictionary *tempDictionary = (NSDictionary *)self; NSNumber *number1 = [[tempDictionary allKeys] objectAtIndex:0]; NSComparisonResult result = [number1 compare:number2]; // return result == NSOrderedDescending; // 升序 return result == NSOrderedAscending; // 降序 }
[b]#利用数组的[b]sortUsingDescriptors调用NSSortDescriptor[/b][/b]
NSSortDescriptor 能够简单的理解为 指定对象的某属性的比較描写叙述。
/** * 能够非常方便的依据model对象中的某个属性进行排序 * sortDescriptor1 数组依据name进行升序排 * sortDescriptor2 数组依据age进行降序排 * 同一时候将两种sortDescriptor增加数组,是指先依照name排序,name同样的依照age排序 */ Person *person1 = [[Person alloc] init]; [person1 setName:@"ABC"]; [person1 setAge:24]; Person *person2 = [[Person alloc] init]; [person2 setName:@"ACB"]; [person2 setAge:22]; Person *person3 = [[Person alloc] init]; [person3 setName:@"ABD"]; [person3 setAge:33]; NSMutableArray *array = [NSMutableArray arrayWithObjects:person1, person2, person3, nil]; NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor <span style="color:#ff0000;">sortDescriptorWithKey</span>:@"_name" ascending:YES]; NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor <span style="color:#ff0000;">sortDescriptorWithKey</span>:@"_age" ascending:NO]; resultArray = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor1,sortDescriptor2,nil]]; for(NSInteger i = 0; i < [resultArray count]; i++) { NSLog(@"%@--------%d\n", [[resultArray objectAtIndex:i] name], [[resultArray objectAtIndex:i] age]); }
相关文章推荐
- 【正则表达式】从json数组中抽取id列表
- oc转化成c语言
- 1.5.6 文件上传
- Html5添加制作全屏响应式效果的图片画廊插件教程
- Android复选框对话框用法实例简析
- Eigen vector and eigen value
- mysql之触发器trigger
- 最常用正则表达式
- 数据库编程第4章
- kaggle titanic 入门实例 逻辑回归的使用 & 随机森林的使用
- HTML表单
- cisco packet tracer 站点到站点 基于ASA5505 IPSEC *** 实验
- tns cluster 简介
- matlab和C/C++混合编程--Mex
- 数据库编程第3章
- JAVA知识问答
- Xamarin部署时遇到错误: Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- jquery json 解析 互转
- 纯css满屏图像幻灯片制作
- Java中文件的压缩与解压