Object-C排序的几种方法
来源:互联网 发布:淘宝上传流通许可证 编辑:程序博客网 时间:2024/06/06 21:40
方法一
利用系统自带的排序方法:
- (NSArray<ObjectType> *)sortedArrayUsingSelector:(SEL)comparator; NSArray *array = [NSArray arrayWithObjects:@"1",@"9",@"3",@"4",@"2", nil]; array = [array sortedArrayUsingSelector:@selector(compare:)];//系统自带 NSLog(@"%@",array); 注意:也可以重写compare:方法如下所示 **方法二 自定义方法,用选择器(类似于C语言的回调函数)进行排序** Person.m@implementation Person+(Person *)personWithName:(NSString *)name age:(int)age{ Person *p = [[Person alloc]init]; p.age = age; p.name = name; return p;}-( NSComparisonResult)comparePerson:(Person *)p{ NSComparisonResult re = [[NSNumber numberWithInt:[p age]] compare:[NSNumber numberWithInt:[self age]]]; if (re == NSOrderedSame) { re = [self.name compare:p.name]; } return re;}-(void) sortArray2{ Person *p1 = [Person personWithName:@"zhangsan" age:12]; Person *p2 = [Person personWithName:@"zhangen" age:12]; Person *p3 = [Person personWithName:@"zhangat" age:12]; Person *p4 = [Person personWithName:@"zhangsrg" age:12]; NSArray *array = [NSArray arrayWithObjects:p1,p2,p3,p4, nil]; NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(comparePerson:)]; NSLog(@"排序后:%@",sortedArray);}- (NSString *)description{ return [NSString stringWithFormat:@"%@,%d", self.name,self.age];}@end
方法三 利用Block进行排序
NSArray *array = [NSArray arrayWithObjects:@"1",@"9",@"3",@"4",@"2", nil]; NSComparator res = ^(id obj1, id obj2){ return [obj1 compare:obj2];//直接比较// if ([obj1 integerValue] > [obj2 integerValue]) {// 转换成整型值,在进行比较// return -1L;// }else// return 1L; }; array = [array sortedArrayUsingComparator:res]; NSLog(@"%@",array);
方法四 高级排序
person.m
#import "Person.h"#import "Car.h"@implementation Person+(Person *)personWithName:(NSString *)name age:(int)age{ Person *p = [[Person alloc]init]; p.age = age; p.name = name; return p;}-(instancetype)initWithName:(NSString *)name age:(int)age car:(Car *)car{ if (self = [super init]) { self.name = name; self.age =age; self.car = car; } return self;}- (NSString *)description{ return [NSString stringWithFormat:@"%@,%d,%@", self.name,self.age,self.car];}-(void) sortArray2{ Car * c1= [[Car alloc]initWitnName:@"1"]; Car * c2= [[Car alloc]initWitnName:@"2"]; Car * c3= [[Car alloc]initWitnName:@"3"]; Car * c4= [[Car alloc]initWitnName:@"4"]; Person *p1 = [[Person alloc]initWithName:@"z"age:34 car:c1]; Person *p2 = [[Person alloc]initWithName:@"r" age:12 car:c2]; Person *p3 = [[Person alloc]initWithName:@"a" age:17 car:c3]; Person *p4 = [[Person alloc]initWithName:@"c"age:87 car:c4]; NSArray *array = [NSArray arrayWithObjects:p1,p2,p3,p4, nil]; //构建排序描述器 NSSortDescriptor *carNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"car.name" ascending:YES]; // NSSortDescriptor *personNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]; // NSSortDescriptor *personAgeDesc = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]; // NSArray *descriptorArray = [NSArray arrayWithObjects:personAgeDesc, nil];//结果(按年龄排序1) // NSArray *descriptorArray = [NSArray arrayWithObjects:personNameDesc, nil];// 结果(按人的名字排序2) NSArray *descriptorArray = [NSArray arrayWithObjects:carNameDesc, nil];// 结果(按car的名字排序3) NSArray *sortedArray = [array sortedArrayUsingDescriptors: descriptorArray]; NSLog(@"%@",sortedArray);}@end
Car.m
#import "Car.h"@implementation Car-(instancetype)initWitnName:(NSString *)name{ if (self = [super init]) { self.name = name; } return self;}- (NSString *)description{ return [NSString stringWithFormat:@"%@", self.name];}@end
结果(按年龄排序1)
结果(按人的名字排序2)
结果(按car的名字排序3)
0 0
- Object-C排序的几种方法
- Object-C 实现几种排序算法
- Object的几种方法及其作用
- ES5中Object的几种方法
- 几种排序方法的实现 (C语言)
- 几种排序方法的C语言实现
- 数据排序的几种方法(c语言实现)
- 数据排序的几种方法(c语言实现)
- 二级c语言之常用的几种排序方法
- 几种常见的排序方法(C语言实现)
- c语言几种有用的排序方法
- 关于c语言几种排序方法的理解
- C语言中的几种排序方法
- 几种排序的方法
- 排序的几种方法
- 排序的几种方法
- 排序的几种方法
- 排序的几种方法
- C语言宏定义和宏函数
- 字符编码研究
- C#学习之路,学习笔记 第九章 继承 9.2由基类创建派生类
- 杭电-4508湫湫系列故事——减肥记I(完全背包)
- 【黑马程序员】-我的OC学习笔记(3)-存取器方法和构造方法重写
- Object-C排序的几种方法
- Linux 文件方式手动设置IP(慕课网笔记)
- 学习html5的WebSocket连接
- 窥探 kernel --- 初识进程调度器 http://blog.csdn.net/muge0913/article/details/7561323
- 你的时间有限,不要为别人而活!
- (2015/11/18)[小Demo]模仿“轻量级图片查看”(状态:未完成)
- Qt之操作数据库(SQLite)
- 迭代器_HashMap分拣思路与面向对象组合解题JAVA_119-121
- 高斯函数