OC数组排序
NSArray *array = @[@"tailong", @"kaersasi", @"airuiliya", @"yingliuzhizhu"];
NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"genie", @"weizhuang", @"tianming", @"shaoyu", @"gaoyue", nil];
/**
* 1.使用NSSortDescriptor(排序描述符,相当于排序条件)
排序描述符由两个参数组成
key:对于一个给定的集合,对应值的键位对集合中的每个元素进行排序
accending:升序(YES)或降序(NO)
*/
// 给排序的数组生成排序描述符
NSSortDescriptor *arraySortDes = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:YES];
// 不可变数组排序
NSArray *array1 = [array sortedArrayUsingDescriptors:@[arraySortDes]];
//NSLog(@"%@", array1);
for (NSString *obj in array1) {
NSLog(@"%@", obj);
}
// 可变数组排序
[mArray sortUsingDescriptors:@[arraySortDes]];
for (NSString *str in mArray) {
NSLog(@"%@", str);
}
//新建一个Person类
Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject @property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *gender;
@property (nonatomic, assign) NSInteger age; // 自定义初始化方法
- (instancetype)initWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age; // 遍历构造器
+ (instancetype)personWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age; // 比较两个人的姓名
- (NSComparisonResult)compareByName:(Person *)person; // 比较两个人的年龄
- (NSComparisonResult)compareByAge:(Person *)person; @end
Person.m
#import "Person.h" @implementation Person // 自定义初始化方法
- (instancetype)initWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age {
if (self = [super init]) {
self.name = name;
self.gender = gender;
self.age = age;
}
return self;
} // 遍历构造器
+ (instancetype)personWithName:(NSString *)name
andGender:(NSString *)gender
andAge:(NSInteger)age {
Person *p = [[Person alloc] initWithName:name andGender:gender andAge:age];
return p;
} // 重写description
- (NSString *)description {
return [NSString stringWithFormat:@"name = %@, gender = %@, age = %ld", self.name, _gender, _age];
} // 比较两个人的姓名(降序在[]前面加个-)
- (NSComparisonResult)compareByName:(Person *)person {
return [self.name compare:person.name];
} // 比较两个人的年龄(降序把>改为<)
- (NSComparisonResult)compareByAge:(Person *)person {
return self.age > person.age;
} @end
// 数组中存放自定义对象进行排序
Person *p1 = [Person personWithName:@"tailong" andGender:@"男" andAge:27];
Person *p2 = [Person personWithName:@"manwang" andGender:@"男" andAge:24];
Person *p3 = [Person personWithName:@"hanbing" andGender:@"女" andAge:20];
Person *p4 = [Person personWithName:@"airuiliya" andGender:@"女" andAge:21];
Person *p5 = [Person personWithName:@"jiansheng" andGender:@"男" andAge:23];
//不可变数组
NSArray *personArray = @[p1, p2, p3, p4, p5];
// 按照姓名进行排序
// 创建排序描述对象
NSSortDescriptor *sortDes1 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *personArray1 = [personArray sortedArrayUsingDescriptors:@[sortDes1]];
NSLog(@"%@", personArray1);
// 按照年龄进行排序
NSSortDescriptor *sortDes2 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];
NSArray *personArray2 = [personArray sortedArrayUsingDescriptors:@[sortDes2]];
NSLog(@"%@", personArray2);
// 可变数组
NSMutableArray *mPersonArray = [@[p1, p2, p3, p4, p5] mutableCopy];
// 按照年龄进行排序
NSSortDescriptor *mSortDes1 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:YES];
[mPersonArray sortUsingDescriptors:@[mSortDes1]];
NSLog(@"%@", mPersonArray);
// 按照姓名进行排序
NSSortDescriptor *mSortDes2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
[mPersonArray sortUsingDescriptors:@[mSortDes2]];
NSLog(@"%@", mPersonArray);
/**
* 2.使用数组中两个元素比较的方法名排序
*/
// 不可变数组
SEL sel = @selector(compare:);
array = [array sortedArrayUsingSelector:sel];
NSLog(@"%@", array);
// 可变数组
[mArray sortUsingSelector:@selector(compare:)];
NSLog(@"%@", mArray);
// 数组中存放自定义对象进行排序
// 不可变数组排序
// 按照姓名排序
personArray = [personArray sortedArrayUsingSelector:@selector(compareByName:)];
NSLog(@"%@", personArray);
// 按照年龄进行排序
personArray = [personArray sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@", personArray);
// 可变数组
// 按照姓名排序
[mPersonArray sortUsingSelector:@selector(compareByName:)];
NSLog(@"%@", mPersonArray);
// 按照年龄进行排序
[mPersonArray sortUsingSelector:@selector(compareByAge:)];
NSLog(@"%@", mPersonArray);
OC数组排序的更多相关文章
- 数组NSArray与NSMutableArray的常用方法
数组中可以放任何类型的数据,并且一个数组中的元素类型可以不一致.只要是(id类型)对象. NSArray 1.初始化 NSArray *array = @[]; 2.初始化,最后需要以nil结尾 NS ...
- iOS学习16之OC集合遍历和数组排序
1.集合遍历 1> 遍历 集合(Collection):OC中提供的容器类:数组,字典,集合. 遍历:对集合中元素依次取出的过称叫做遍历. 三种方式:① for循环遍历: ② NSEnumera ...
- OC:Block语法、Block使用、Block实现数组排序
Block //定义一个求两个数最大值函数 int maxValue (int ,int); //函数的实现 int maxValue (int a, int b){ return a > b ...
- OC中数组排序总结
过完节回来,感觉很多东西都生疏了.总结一下数组的排序.应该不会太完美,后续添加补充. OC中的数组排序方法其实不太多,要根据不同的使用场景来使用不同的方法.Foundation框架中一般用到一下几个方 ...
- OC中数组排序的3种方法
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...
- OC中用NSSortDescriptor对象进行数组排序
//创建一个数组 NSArray *array = @[@"one", @"two", @"three", @"four" ...
- OC:数组排序、时间格式化字符串
数组排序 //不可变数组的排序 NSArray * arr = [NSArray arrayWithObjects:@"hellow", @"lanou", @ ...
- OC NSArray数组排序
一.一般排序 // 排序 NSArray *arr = @["]; NSArray *newarr = [arr sortedArrayUsingSelector:@selector(com ...
- Objective C中数组排序几种情况的总结
总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 数组排 ...
随机推荐
- 使用NPOI导出excel
NPOI下载地址http://npoi.codeplex.com/releases 从项目中引用NPOI.bll和NPOI.OOXML.bll 引用命名控件 using NPOI.HSSF.UserM ...
- apple Swift教程大全,希望对你有帮助!
1)apple Swift编程入门文档- http://gashero.iteye.com/blog/2075324 一位大神写的关于Swift的一些介绍和简单的使用,里面介绍了Swift和其他语言的 ...
- 推荐几款很棒的 JavaScript 表单美化和验证插件
表单元素让人爱恨交加.作为网页最重要的组成部分,表单几乎无处不在,从简单的邮件订阅.登陆注册到复杂的需要多页填写的信息提交功能,表单都让开发者花费了大量的时间和精力去处理,以期实现好用又漂亮的表单功能 ...
- [git]安装git-pylint-commit-hook提高python项目中的代码质量
什么是'git-pylint-commit-hook' 我在工作中,团队为了保证代码和提高代码的质量,要求每个项目都要求安装git-pylint-commit-hook,它是个钩子,会在你提交代码到本 ...
- 《敏捷个人-认识自我、管理自我.pdf》更新至 v0.7
更新版1400多页,原价10元,现在 1元淘宝再次上架 http://t.cn/zT8GOa7 , 活动截止时间到:2013-8-18日 v0.7增加16期敏捷个人周刊,15天的每日认识练习,10天的 ...
- Java工程师面试题,整理自网络与博主各种笔试面试,持续更新
1.面向对象的特征有哪些方面? 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口. 多态性:多态性是指允许不同子类型的对象对同一消息作出不同的响应.简单的说就是用同 ...
- 堆表和%%lockres%%函数
在今天的文章里,我想向你展示下SQL Server里一个未公开的函数,还有你如何用那个函数来找出在哪页记录被存储. %%lockres%% 今天我想向你展示的未公开函数叫做%%lockres%%,它与 ...
- Vim杂记:markdown插件
一.安装插件 从以下地址下载压缩包 github下载:https://github.com/plasticboy/vim-markdown plasticboy下载:http://plasticboy ...
- 1215 spring 3 项目更新
列志华 (组长) http://www.cnblogs.com/liezhihua/ 团队guihub https://github.com/LWHTF/OrderingFood 黄柏堂 http:/ ...
- 6/14 sprint2 看板和燃尽图的更新
看板: 燃尽图: 例会照: 总结:因为最近刚好碰上端午假期,再加上程序出了点问题,所以导致进度有点慢, 但是我们还是很努力地在找资料把问题给解决了,虽然完成的情况有点不如人意, 但是我们付出的努力还是 ...