iOS学习之NSArray的排序方法
2015-09-02 11:39
441 查看
坚持 成长 每日一篇
在主函数里创建用于排序的数组
输出结果如下:
输出结果如下:
输出结果如下:
注意:无论何种排序,都不会影响原来数组的排序,即demo中array的排序。排序的结果都是以一个新的数组返回。
排序准备
这里我准备一个User对象用语我们后面排序时候使用@interface User : NSObject @property (nonatomic,readwrite,assign) NSInteger age ; @property (nonatomic,readwrite,assign) NSInteger height; -(NSComparisonResult)compare:(User*)user; @end @implementation User -(id)initWithAge:(NSInteger)age height:(NSInteger)height { self = [super init]; if (self) { self.age = age; self.height = height; } return self; } /*NSComparisonResult是一个枚举 *NSOrderedAscending 升序 -1 不交换 *NSOrderedSame 相同 0 不交换 *NSOrderedDescending 降序 +1 可以理解为比较的两个位置交换 */ //此函数实现的是按照age的生序排法 -(NSComparisonResult)compare:(User*)user { //此处的user指代的当前对象后面的某个对象 if (self.age > user.age) { //如果当前对象大于后面对象交换两个对象,这是实现了生序排序,如果要实现降序则把函数体里的NSOrderedDescending和NSOrderedAscending交换 return NSOrderedDescending; }else if(self.age < user.age) { return NSOrderedAscending; }else { return NSOrderedSame; } } -(NSString*)description { return [NSString stringWithFormat:@"age = %ld,height = %ld",self.age,self.height]; } @end
在主函数里创建用于排序的数组
User *user1 = [[User alloc] initWithAge:10 height:180]; User *user2 = [[User alloc] initWithAge:15 height:150]; User *user3 = [[User alloc] initWithAge:20 height:180]; User *user4 = [[User alloc] initWithAge:30 height:134]; User *user5 = [[User alloc] initWithAge:30 height:154]; //创建用于排序的数组 NSArray *array = @[user3,user2,user4,user1,user5];
方法1:使用sortedArrayUsingSelector对数组进行排序
//方法1:使用sortedArrayUsingSelector对数组进行排序 //compare方法指的是数组里对象的方法。 NSArray * sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
输出结果如下:
( "age = 10,height = 180", "age = 15,height = 150", "age = 20,height = 180", "age = 30,height = 134", "age = 30,height = 154" )
方法2:使用sortedArrayUsingComparator对数组进行排序
//方法2:使用sortedArrayUsingComparator对数组进行升序排序 NSArray *sortArray = [array sortedArrayUsingComparator:^NSComparisonResult(User *obj1, User *obj2) { if (obj1.age > obj2.age) { return NSOrderedDescending; }else if(obj1.age < obj2.age) { return NSOrderedAscending; }else { return NSOrderedSame; } }]; NSLog(@"sortArray =%@",sortArray);
输出结果如下:
( "age = 10,height = 180", "age = 15,height = 150", "age = 20,height = 180", "age = 30,height = 134", "age = 30,height = 154" )
方法3.通过描述器NSSortDescriptor定义排序规则
//方法3.通过描述器NSSortDescriptor定义排序规则 yes表示生序,no表示降序,这里的key也可是属性的属性哦 NSSortDescriptor *userAge =[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES]; NSSortDescriptor *userHeight=[NSSortDescriptor sortDescriptorWithKey:@"height" ascending:YES]; //先按照user的age排序再按照user的height排序 NSArray *des=[NSArray arrayWithObjects:userAge,userHeight, nil]; //执行排序 NSArray *sortArray=[array sortedArrayUsingDescriptors:des]; NSLog(@"%@",sortArray);
输出结果如下:
( "age = 10,height = 180", "age = 15,height = 150", "age = 20,height = 180", "age = 30,height = 134", "age = 30,height = 154" )
注意:无论何种排序,都不会影响原来数组的排序,即demo中array的排序。排序的结果都是以一个新的数组返回。
相关文章推荐
- iOS从零开始学习之初
- IOS - sectionHeader的编辑(纯代码做界面)
- iOS 9 适配系列教程
- iOS录音
- 【iOS学习笔记15-09-02】iOS中runtime机制
- nios系统generate时"Generation skipped because the system has validation errors"j解决方法
- iOS多个视频拼接合成为一个视频
- iOS中文路径转换URLEncode
- iOS 函数耗时测试
- Xcode iOS 进程启动失败:安全问题 Xcode process launch failed: Security or timed out等问题处理
- 苹果开发者账号申请与iTunesconnect中心问题联系电话
- iOS字体相关知识
- iOS开发:自定义库实现广告图片轮播
- 《ios人机交互指南翻译系列之一,来自苹果最新官方文档,2015.8》 设计策略:把概念变成产品
- iOS~runtime理解
- iOS 开发批量保存图片到相册时丢图片的解决方法
- ios 修改字体
- iOS多线程——GCD
- iOS多线程——基础
- 启动控制器的创建