OC-数组排序-NSSortDescriptor使用
OC-数组排序-NSSortDescriptor使用
在Object-c中,当有一个班级类MyClass,还有一个学生类Student.在班级类MyClass中通过一个可变数组NSMutableArray保存了许多的学生对象。现在有一个功能需要对学生进行按各种条件排序(按姓名升序,按学号降序,按成绩升序)。
借用上面一个简单的功能来了解一下Object-c中排序描述对象NSSortDescriptor对数组的排序的使用方法。
简单的了解一下以下几个类:Student(学生类)、MyClass(班级类)
Student:(只给接口)

1 @interface Student : NSObject
2 {
3 NSString * _name;
4 NSInteger _num;
5 NSInteger _score;
6 }
7
8 - (id)initWithName:(NSString *)name number:(NSInteger)num score:(NSInteger)score;
9 - (void)setName:(NSString *)name;
10 - (NSString *)name;
11 - (void)setNum:(NSInteger)num;
12 - (NSInteger)num;
13 - (void)setScore:(NSInteger)score;
14 - (NSInteger)score;
15
16 @end

MyClass:(接口)

@interface MyClass : NSObject
{
NSString * _className;
NSMutableArray * _stuList;
} - (id)init;
- (void)setClassName:(NSString *)name;
- (NSString*)className;
- (void)addStudent:(Student *)student;
- (void)addStudent:(Student *)student atIndex:(NSInteger) index;
- (void)removeStudent:(Student *)student;
- (void)removeStudentAtIndex:(NSInteger) index;
- (void)replaceStudent:(Student *)student atIndex:(NSInteger) index;
- (void)showStuList;
- (void)sortedByNumber;//按照学号升序
- (void)sortedByScore;//按照分数降序
- (void)sortedByName;//按照名字降序 - (void)sortedByNameAscByNumDescByScoreAsc;
@end

MyClass:(具体实现方法)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
@implementation MyClass - ( void )sortedByNumber //按照学号升序 { NSSortDescriptor *sd1 = [ NSSortDescriptor sortDescriptorWithKey:@ "_num" ascending: YES ]; NSArray *sdArray = [ NSArray arrayWithObjects:sd1, nil ]; [_stuList sortUsingDescriptors:sdArray]; // [_stuList sortedArrayUsingDescriptors:sdArray]; } - ( void )sortedByScore //按照分数降序 { NSSortDescriptor *sd = [ NSSortDescriptor sortDescriptorWithKey:@ "_score" ascending: NO ]; NSArray *sdArray = [[ NSArray alloc]initWithObjects:sd, nil ]; [_stuList sortUsingDescriptors:sdArray]; } - ( void )sortedByName //按照名字降序 { NSSortDescriptor *sd = [ NSSortDescriptor sortDescriptorWithKey:@ "_name" ascending: NO ]; NSArray *sdArray = [[ NSArray array] initWithObjects:sd, nil ]; [_stuList sortUsingDescriptors:sdArray]; } - ( void )sortedByNameAscByNumDescByScoreAsc //按照名字升序,学号降序,分数升序来排列数组中的对象 { NSSortDescriptor *sdName = [[ NSSortDescriptor alloc]initWithKey:@ "_name" ascending: YES ]; NSSortDescriptor *sdNum = [[ NSSortDescriptor alloc]initWithKey:@ "_num" ascending: NO ]; NSSortDescriptor *sdScore = [ NSSortDescriptor sortDescriptorWithKey:@ "_score" ascending: YES ]; NSArray *sdArray = [[ NSArray alloc] initWithObjects:sdName,sdNum,sdScore, nil ]; [_stuList sortUsingDescriptors:sdArray]; } @end |
就由上面的 sortedByNameAscByNumDescByScoreAsc 方法来分析NSSortDescriptor对象的使用方法。
1.通过NSSortDescriptor对象的对象方法 initWithKey 或是直接通过类方法 sortDescriptorWithKey 生成一个NSSortDescriptor(排序描述)对象,该对象传进一个排序关键字(该关键字是要排序的数组中元素对象的属性),并且设置按照该关键字(属性)是按照升序还是降序。
2.将NSSortDescriptor对象(可以多个)添加到一个数组中。
3.最后通过数组的方法 sortUsingDescriptors ,将第二步中的数组作为参数传递进去,获得的结果就是已经排序好的数组了。
以上方法适用于可变数组和不可变数组,只是方法略微有点不一样。
转载:http://www.cnblogs.com/BeyondAverage0908/p/4571638.html
OC-数组排序-NSSortDescriptor使用的更多相关文章
- OC中用NSSortDescriptor对象进行数组排序
//创建一个数组 NSArray *array = @[@"one", @"two", @"three", @"four" ...
- OC数组排序
NSArray *array = @[@"tailong", @"kaersasi", @"airuiliya", @"yingl ...
- iOS 开发小常识 开发笔记
一 自定义push方法 /* 参数说明 * controllerName : push的目标页 例:@“testcontroll” ---注意不带.h * isNibPage ...
- 数组NSArray与NSMutableArray的常用方法
数组中可以放任何类型的数据,并且一个数组中的元素类型可以不一致.只要是(id类型)对象. NSArray 1.初始化 NSArray *array = @[]; 2.初始化,最后需要以nil结尾 NS ...
- iOS学习16之OC集合遍历和数组排序
1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...
- OC中数组排序的3种方法
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...
- NSSortDescriptor对象进行数组排序
//创建一个数组 NSArray *array = @[@"zhangsan", @"lisi", @"zhonger", @"z ...
- OC:Block语法、Block使用、Block实现数组排序
Block //定义一个求两个数最大值函数 int maxValue (int ,int); //函数的实现 int maxValue (int a, int b){ return a > b ...
- NSSortDescriptor(数组排序)
如果数组里面的每一个元素都是一个个model,例如 DepartsDate.h文件 [plain] view plaincopy #import <Foundation/Foundation.h ...
- OC中数组排序总结
过完节回来,感觉很多东西都生疏了.总结一下数组的排序.应该不会太完美,后续添加补充. OC中的数组排序方法其实不太多,要根据不同的使用场景来使用不同的方法.Foundation框架中一般用到一下几个方 ...
随机推荐
- 【转】ssh登录慢,等待输入密码时间长的解决办法
http://youhuiba.net/2013/06/09/520.html 有时候在ssh远程登录到其他主机上时发现登录时间太长,要等待很久才会出现输入密码的提示,google了一下,发现主要有两 ...
- UIAlertView 与 UIActionSheet (提示用户)的使用方法
UIAlertView 提示用户 帮助用户选择框 // UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"警 ...
- 洛谷 P1305 新二叉树 Label:字符串的输出总是有惊喜
题目描述 输入一串完全二叉树,用遍历前序打出. 输入输出格式 输入格式: 第一行为二叉树的节点数n. 后面n行,每一个字母为节点,后两个字母分别为其左右儿子. 空节点用*表示 输出格式: 前序排列的完 ...
- 【bzoj2333】 [SCOI2011]棘手的操作 可并堆+lazy标记
2016-05-31 21:45:41 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2333 (学习了黄学长的代码 有如下操作: U x y ...
- java8 引进lamda
就像泛型能使开发人员对数据类型进行抽象,Lambda的目的是让程序员能够对程序行为进行抽象. 你可以这样想,它能够让程序员把一段程序代码当做数据一样使用.一个方法可以像定义和使用一个变量那样的方式被定 ...
- 在docker 中搭建gitlab环境
docker run --name gitlab -it -p : -p : -p : \ --env 'GITLAB_SECRETS_DB_KEY_BASE=Rpwq35wjLJ5N6CrkvdXs ...
- C#:实现快捷键自定义设置(转)
项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示: 当我们相继按下Ctrl+Alt+M的时候,软件就会自动将快捷键显示在文本框中. 最终的效果如下图所示: private ...
- 处理海量数据的高级排序之——归并排序(C++)
代码实现 ...
- 360safe安全卫士防网站攻击源码
近段时间,公司网站老被攻击,于是研究起防止攻击方法,当然无外乎就是SQL注入之类的问题,无意间发现了一个360安全卫士提供的源码,觉得挺好的,咋们暂且不说防攻击效果,至少思路是很好的,奉献给大家,大家 ...
- 延迟加载图片插件LazyLoad.js的使用方法
我们常常会见到很多网页的图片并不是一打开页面就全部加载的,而是浏览到当前的图片位置才显示出来.这是怎么实现出来的呢? 其实这就是目前较为流行的“延迟加载”(Lazy Load)技术,灵感来自Matt ...