OC中用NSSortDescriptor对象进行数组排序
//创建一个数组
NSArray *array = @[@"one", @"two", @"three", @"four", @"six"];
//创建一个排序条件,也就是一个NSSortDescriptor对象
//其中第一个参数为数组中对象要按照什么属性来排序(比如自身、姓名,年龄等)
//第二个参数为指定排序方式是升序还是降序
//ascending 排序的意思,默认为YES 升序
NSSortDescriptor *des = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
NSArray *newArray = [array sortedArrayUsingDescriptors:@[des]];
NSLog(@"%@",newArray);
可以用sortedArrayUsingDescriptors:方法实现把多个排序条件放到数组中,实现多条件排序,按数组先后顺序,先加入的优先级高
//创建一个Person类
Person *p1 = [[Person alloc] initWithName:@"zhonger" age:@""];
Person *p2 = [[Person alloc] initWithName:@"zhubada" age:@""];
Person *p3 = [[Person alloc] initWithName:@"zhubada" age:@""];
Person *p4 = [[Person alloc] initWithName:@"zhubada" age:@""];
Person *p5 = [[Person alloc] initWithName:@"hehehe" age:@""];
NSArray *person = @[p1, p2, p3, p4, p5];
NSSortDescriptor *des1 = [[NSSortDescriptor alloc]initWithKey:@"name" ascending:YES];
NSSortDescriptor *des2 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
NSArray *newArray1 = [person sortedArrayUsingDescriptors:@[des1,des2]];
NSLog(@"%@",newArray1);
使用NSSortDesriptor进行数组排序有三步
1.创建一个用来排序的数组
2.创建一个排序条件,初始化中需要指定按照数组中对象的什么属性进行排序,升序或者降序
3.数组根据排序条件进行排序,得到一个排序之后的数组(如果是可变数组,不会生成新数组,还是本身)
使用的sortedArrayUsingSelecor:的方法,就不需要创建NSSortDescriptor
NSArray *strArray = @[@"zhonger", @"zhubada", @"qiuxiang", @"tangbohu", @"honghuang"];
NSArray *nesStr = [strArray sortedArrayUsingSelector:@selector(compare:)]; //SEL 只能用@selector(方法名)给定,并且,如果数组使用这个数组进行排序,此方法必须是返回值为NSComparisionResult
NSLog(@"newStr is %@",nesStr);
NSArray *personNewArray = [person sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"--%@",personNewArray);
OC中用NSSortDescriptor对象进行数组排序的更多相关文章
- NSSortDescriptor对象进行数组排序
//创建一个数组 NSArray *array = @[@"zhangsan", @"lisi", @"zhonger", @"z ...
- IOS对存放对象的数组排序
我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中.例如一个音乐程序可能会有一个Song类,聊天程序则又一个 Friend类,点菜程序会有一个Recipe类等.有时候我们希望 ...
- iOS学习10之OC类和对象
本次是OC的第一节课,主要是学习和理解类与对象 1.面向对象 1> OOP(Object Oriented Programming)面向对象编程. 面向对象以事物为中心,完成某件事情都需要哪些事 ...
- oc学习之对象在内存的位置
对象在内存中的存储 1. 内存中的五大区域. 栈: 存储局部变量. 堆: 允许程序员手动在堆区申请指定的连续的字节数的空间来使用. BSS段: 存储未初始化的全局变量.静态变量. 数据段(常量区): ...
- OC之类与对象
1.面向过程与面向对象. 1). 完成需求1 将大象放进冰箱. a. 把冰箱门打开. b. 把大象放进去. c. 把冰箱门关上. 这是面向过程的思路. 找1个冰箱,要求这个冰箱可以自己开门,自己把大象 ...
- OC学习16——对象归档
转载自 OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都 ...
- Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:
OC内部:可变对象和不可变对象的深(复制)拷贝问题思考: 不可变对象: 例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向 ...
- OC 继承子类对象调用方法机制 子类对象访问父类中的实例变量
在继承中,子类对象如何调用到正确方法的机制 每一个Objective - C对象都有一个隐藏的指针指向类的代码,当向一个对象发送消息的时候,当前的对象会首先在当前类里去查找相应的方法,如果找到的话,直 ...
- OC 构造方法(对象初始化)
一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法来分配存储空间(返 ...
随机推荐
- 工厂食堂3D指纹考勤系统解决方案
指纹考勤就餐管理系统利用3D活体指纹技术完成对正式员工就餐管理.就餐者只需办理完入职手续,并登记考勤指纹,就可通过考勤指纹在工厂食堂领餐. 大多数工厂食堂就餐是福利性的,只准员工就餐,不准员工带亲戚朋 ...
- C#字节数组转换成字符串
C#字节数组转换成字符串 如果还想从 System.String 类中找到方法进行字符串和字节数组之间的转换,恐怕你会失望了.为了进行这样的转换,我们不得不借助另一个类:System.Text.Enc ...
- SQL出错
2016-12-26 15:43:02,870 DEBUG [org.springframework.test.context.support.DirtiesContextTestExecutionL ...
- JFinal - Log 日志
今天偶然发现 JFinal 的 Log 简单小巧.上代码. JFinal 在初始化的时候有初始化 Log. class Config { // ... static void configJFinal ...
- 腾讯云>>云通信>>TLS后台API在mac上JAVA DEMO搭建
1.相关文档地址 2.相关demo代码 代码部分作了修改,使用了commons-io中的IOUtils.toString简化了io操作 public class Demo { public stati ...
- VS学习
7.9 今天打开老师给的俄罗斯方块的程序,硬是跑不出来.已经遇到了这几个问题 [1]在项目属性里面C++目录中修改头文件和库函数的绝对路径(基础知识刚学会) [2]errorC1083 SDKDDKe ...
- RansomNote
Given an arbitrary ransom note string and another string containing letters from all th ...
- [SoapUI] 在SoapUI里获取Excel中多行数据并存入List
ArrayList<ArrayList<String>> getCellValuesH( String filePath, String sheetName,int tr1,i ...
- Docker容器是否可以改变世界?
Docker容器是否可以改变世界? 2016-01-15 杜亦舒 2016年了,很多大牛开始预测技术趋势,其中一个普遍的观点我也很认同: Docker会更加流行,会改变程序世界 2015年的上半年我接 ...
- [阅读笔记]Zhang Y. 3D Information Extraction Based on GPU.2010.
1.立体视觉基础 深度定义为物体间的距离 视差定义为同一点在左图(reference image) 和右图( target image) 中的x坐标差. 根据左图中每个点的视差得到的灰度图称为视差图. ...