1、自定义方法排序:

NSArray *array = [NSArray arrayWithObjects:@"", @"", @"", @"", nil];
NSArray *array2 = [array sortedArrayUsingSelector:@selector(compare:)];
//sortedArrayUsingSelector:@selector() 方法会把数组array中的元素按指定元素的比较方法compare: 返回一个排好序的数组(默认从小到大),原数组的元素顺序不会改变;
//注:sortedArrayUsingSelector:@selector()的参数是传一个方法参数。 //先在其他类中实现如下方法:Start
+ (id)studentWithFirstname:(NSString *)firstname lastname:(NSString *)lastname { //此方法创建对象时调用
Student *stu = [[[Student alloc] init] autorelease];
stu.lastname = lastname;
stu.firstname = firstname;
return stu;
}
-(NSComparisonResult)compareStudent:(Student *)stu
{ // 先按照姓排序
NSComparisonResult result = [self.lastname compare:stu.lastname];
if (result == NSOrderedSame) { //默认按照ASCII码表中的顺序排序,如果有相同的姓,就比较名字。
result = [self.firstname compare:stu.firstname];
}
return result;
}
+ (id)studentWithFirstname:(NSString *)firstname lastname:(NSString *)lastname bookName:(NSString *)bookName {
Student *stu = [Student studentWithFirstname:firstname lastname:lastname];
stu.book = [Book bookWithName:bookName];
return stu;
}
+ (id)bookWithName:(NSString *)name {
Book *book = [[[Book alloc] init] autorelease];
book.name = name;
return book;
}
-(NSString *)description
{
//重写description方法是输出结果从内存地址变为可读的对象名如:Li MingeJie
return [NSString stringWithFormat:@"[%@ %@-%@]", self.lastname, self.firstname, self.book.name];
}
//先在其他类中实现如上方法:End Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
Student *stu2 = [Student studentWithFirstname:@"XiaoXu" lastname:@"Zhang"];
Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
Student *stu4 = [Student studentWithFirstname:@"LiDa" lastname:@"Zhang"];
NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
//创建的四个对象存进数组array中。
NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)]; //指定排序的比较方法compareStudent: ,这个方法为在类中实现的方法。

2、数组集合利用block进行排序:

Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li"];
Student *stu2 = [Student studentWithFirstname:@"XiaoXu" lastname:@"Zhang"];
Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li"];
Student *stu4 = [Student studentWithFirstname:@"LiDa" lastname:@"Zhang"]; NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil];
//创建的四个对象存进数组array中。 NSArray *array2 = [array sortedArrayUsingComparator:^NSComparisonResult(Student *obj1, Student *obj2)
{//sortedArrayUsingComparator: 方法 是利用block进行排序,每当进行两个元素的比较时都会调用这个Block进行比较;Block为sortedArrayUsingComparator: 方法的参数。
NSComparisonResult result = [obj1.lastname compare:obj2.lastname];  // 先按照姓排序 if (result == NSOrderedSame) {//默认按照ASCII码表中的顺序排序,如果有相同的姓,就比较名字
result = [obj1.firstname compare:obj2.firstname];
}
return result;
}];

3、数组排序-高级排序:

Student *stu1 = [Student studentWithFirstname:@"MingJie" lastname:@"Li" bookName:@"book1"];
Student *stu2 = [Student studentWithFirstname:@"XiaoXu" lastname:@"Zhang" bookName:@"book2"];
Student *stu3 = [Student studentWithFirstname:@"LianJie" lastname:@"Li" bookName:@"book2"];
Student *stu4 = [Student studentWithFirstname:@"LiDa" lastname:@"Zhang" bookName:@"book1"]; NSArray *array = [NSArray arrayWithObjects:stu1,stu2,stu3, stu4, nil]; NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];
//NSSortDescriptor 为排序描述类型,bookNameDesc 为排序描述类型对象;sortDescriptorWithKey: 方法先按照指定的书名@"book.name"进行排序, 这里的key(book.name中的book)写的是@property的名称;ascending:代表升序。 //再按照姓进行排序:
NSSortDescriptor *lastnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES]; //再按照名进行排序:
NSSortDescriptor *firstnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES]; //按顺序添加排序描述器descs:bookNameDesc、lastnameDesc、firstnameDesc可根据实际需求按顺序写在代码中,决定着排序的优先级,先写的先按此标准排序:
NSArray *descs = [NSArray arrayWithObjects:bookNameDesc, lastnameDesc, firstnameDesc, nil];//此处的descs是一个设置好顺序的顺序描述器,而非寻常数组。 NSArray *array2 = [array sortedArrayUsingDescriptors:descs];
//sortedArrayUsingDescriptors: 方法把排序描述器descs按其内部已经指定好的顺序排好顺序并返回一个排好顺序的数组。 NSLog(@"array2:%@", array2);//此处的数组array2是一个按需求排好顺序的新数组。

NSArray的排序的更多相关文章

  1. NSArray Sort 排序

    打算实现tableview的生序降序排序 ```js NSArray * rs= [oneArray sortedArrayUsingComparator:NSComparisonResult(RFI ...

  2. NSArray的排序方法

    转自:http://blog.csdn.net/lixuwen521/article/details/7848893 1.sortedArrayUsingSelector (按Key值大小对NSDic ...

  3. 死去活来的OC NSArray 中文排序 及输出

    目的 1.NSArray 能够支持中文排序 2.NSLog 能够直接输出 NSArray 内的中文(事实上 java 直接打印数组也不能显示内容哈) 又是死去活来的搞了1个小时,分类实现.废话少说,上 ...

  4. 将NSArray反向排序

    NSArray * array = [NSArray arrayWithObjects:", nil]; NSArray * reverseArray = [[array reverseOb ...

  5. IOS第四天(3:数组的排序和乱序)

    数组的升序和降序 - (void)sortWith:(NSArray *)array { // 排序 array = [array sortedArrayUsingComparator:^NSComp ...

  6. Objective-C学习篇07—NSArray与NSMutableArray

    大纲 NSArray NSMutableArray 快速枚举 NSArray NSArray是一个静态数组,也就是一个不可变数组,一旦创建以后,就不能进行添加,删除或者修改其中的元素.NSArray继 ...

  7. NSArray数组的学习总结

    1.不可变数组NSArray NSArray是不可变的,而且只能储存Object-c对象.另外,数组的最后一个元素一定是nil,表示结束. 注:这些集合类只能收集cocoa对象(NSOjbect对象) ...

  8. 代码规范[iOS]

    一.文件系统 二.代码结构 三.常量  宏 四.布局方式  数据持久化 五.网络 六.类目.延展 七.内存.线程 八.其他 九.版本控制.上线相关 十.附录1(公共库) 十一.附录2(公共类目) 十二 ...

  9. OC学习13——Foundation框架中的集合

    OC集合类是一些非常有用的工具类,它可以用于存储多个数量不等的对象,并可以实现常用的数据结构(栈.队列等),此外,OC集合还可用于保存具有映射关系的关联数组.OC的集合大致可以分为:NSArray.N ...

随机推荐

  1. linux 下 jdk tar.gz 包安装方法

    JDK安装 tar.gz为解压后就可使用的版本,这里我们将jdk-7u3-linux-i586.tar.gz解压到/usr/local/下. 1.解压 解压到当前目录:$ tar -zxvf /opt ...

  2. 文件服务器迁移—FSMT

    www.canway.net/Lists/CanwayOriginalArticels/DispForm.aspx?ID=282

  3. ASP.NET(C#)--Repeater中生成“序号”列

    需求介绍:在Repeater(Table)中加入“序号”列,从1开始自增,步长为1. 思路:因为“序号”跟Repeater的行号有关,所以要在Repeater的ItemDataBound事件中输出“序 ...

  4. Oracle sqlldr使用示例

    SQLLDR用于快速的批量导入数据, 示例步骤如下: 1.确定Oracle的连接示例 username/password@sid 我使用的是:system/world @ localorcl sid是 ...

  5. Android IOS WebRTC 音视频开发总结(六一)-- 大数据解密国内实时通讯行业开发现状

    本文主要介绍国内实时通讯行业现状,文章最早发表在我们的微信公众号上,详见这里,欢迎关注微信公众号blackerteam,更多详见www.blackerteam.com 这几年移动互联网发展势头很猛,与 ...

  6. 【风马一族_mysql】MySQL免安装版环境配置图文教程

    mysql存放在某一个磁盘中(笔者使用E盘) 配置系统变量 打开 电脑的属性 点击 高级系统设置 选择 高级 点击 环境变量 选择 系统变量 点击 变量Path,追加 值 E:\mysql-5.6.2 ...

  7. html5,html5教程

    html5,html5教程 1.向后兼容 HTML5是这样被定义的:能向后兼容目前UA处理内容的方式.为了让语言更简单,一些老的元素和Attribute被舍弃.比如一些纯粹用于展现的元素(译注:即非语 ...

  8. POJ C程序设计进阶 编程题#4:Tomorrow never knows?

    来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 甲壳虫的<A day ...

  9. [leetcode]_Minimum Depth of Binary Tree

    第五道树题,10分钟之内一遍AC.做树题越来越有feel~ 题目:求一棵树从root结点到叶子结点的最短路径. 思路:仍然是递归.如果一个结点的左右子树任意一边为Null,该子树的minDepth应为 ...

  10. Uva 1588 Kickdown

    这道题思路并不难想,在做题过程中主要遇到的困难有: 因为没有仔细的考虑边界情况,没有分析全面,导致因=没有取到而得不出正确结果,浪费的大量时间. 今后在做这类题目时,一定要先进行一个比较全面的分析+模 ...