iOS 自定义对象数组排序 自定义对象某属性排序
来源:互联网 发布:缅甸听音乐的软件 编辑:程序博客网 时间:2024/05/01 14:04
文章翻译自stackoverflow问题‘How to sort an NSMutableArray with custom objects in it?’
原问题链接http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it
以下是正文:
数组排序我们经常用到,有时候可能需要做一些比较特殊的排序。比如说我的数组中装了一些我自定义的对象,要运用对象里面的某一个属性进行排序。文章以一个'MYPerson'类,按照里面的‘birthDate’属性进行排序,该属性是‘NSDate’类。需要说明的是,系统已经实现了NSDate类时间的排序方法:
NSDate *date1 = [NSDate date]; NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:5]; NSComparisonResult result = [date1 compare:date2];// typedef NS_ENUM(NSInteger, NSComparisonResult) {// NSOrderedAscending = -1L, 升序// NSOrderedSame, 相同// NSOrderedDescending}; 降序首先我们自定义一个MYPerson类,然后重写一下初始化方法方便初始化的时候赋值生日属性。然后采用随机数的办法生成一定个数,生日时间随机的对象:
//随机生成模拟初始数据 NSMutableArray<MYPerson *> *originArray = @[].mutableCopy; for (int index = 0; index < 10; index++) { NSInteger random = arc4random() % 99; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:random * 100000]; MYPerson *person = [[MYPerson alloc] initWithBirthDate:date]; [originArray addObject:person]; NSLog(@"第%d个:%@", index, date); }
列了三种排序的方法。
方法1为:Compare method 在自定义的对象中实现compare方法,然后数组利用选择器直接排序。自定义类中实现如下
然后调用方法进行排序
[originArray sortedArrayUsingSelector:@selector(compare:)];
方法2为:NSSortDescriptor(better) 比前者要好写 该类时专门用来描述数组排序的规则的。用KVC的方法生成实例对象,需要注意的是,原自定义对象的属性作为key生成该排序描述对象的时候,这个key一定不能写错,不然会造成程序出错。实现方法如下:
#pragma mark 方法2.NSSortDescriptor(better)- (NSArray *)sortedWithNSSortDescriptor:(NSArray *)originArray { NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor]; return [originArray sortedArrayUsingDescriptors:sortDescriptors];}
方法3为:Blocks(shiny!) 答主推荐的方法 用NSArray自带的block进行排序,有点是代码都在一块,简洁明了。实现如下:
#pragma mark 方法3.Blocks(shiny!) NSArray *sortedArray3 = [originArray sortedArrayUsingComparator:^NSComparisonResult(MYPerson *personA, MYPerson *personB) { return [personA.birthDate compare:personB.birthDate]; }];
因为刚好是时间要进行对比,所以compare方法已经实现好了, 如果是其他类型的有自己需要的对比规则也是可以实现的。
******以上
(欢迎随手给一颗星星哦~)本篇博客Demo地址https://github.com/xmy0010/DemoForCSDN
本人邮箱18144200589@163.com欢迎小伙伴一起讨论,学习,进步。
- iOS 自定义对象数组排序 自定义对象某属性排序
- 自定义对象数组的排序
- 排序数组中的自定义对象
- List 根据对象的属性自定义排序
- C#自定义对象排序(数组/ArrayList)
- Java自定义对象数组、集合排序
- 自定义对象排序
- List自定义排序 让Collections.sort 排序支持对象属性
- iOS 数组/对象排序
- iOS对象数组排序
- 针对数组中自定义的NSObject对象按照某个属性的排序
- 【ios】如何按照自定义类的对象的某个属性进行排序
- 数组按照对象属性排序
- 实体对象的自定义排序
- 常用对象集合自定义排序
- 自定义对象里面的 针对 某个属性 / 字段 进行排序
- 如何实现自定义类对象数组的排序
- 数组自定义排序,判断对象是否为空!
- MongoDB connection timeout
- <戏说春秋> 第二关 纸上谈兵
- Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并(转)
- TestView添加切割线,类似商品打折
- Dalvik Vm架构
- iOS 自定义对象数组排序 自定义对象某属性排序
- mybatis--No constructor found
- 关于Tomcat的URIEncoding以及GET乱码
- android tortoisesvn & 结合android studio使用
- Python 列表(List)操作
- 各种不同类型的request response session (Struts2中的 jsp的 servlet的
- 最小生成树(EOJ-2067Building Roads)
- 简单图形界面
- vs015找不到win32控制台解决办法