iOS开发之数组排序
2016-01-04 12:58
357 查看
NSString有多个compare相关方法:
NSComparisonResult 是定义的一个枚举,定义如下:
其中,NSOrderedSame 表示比较的两个字符串完全一致, 同时,在这个枚举中,它的值是 0.
我们如何给一个数组进行排序(数组中存储着HXPerson对象)?
下面介绍三种方法
1. 使用NSComparator:实际上是用一个block对象作比较操作,返回结果是NSComparisonResult类型(枚举)
2. 使用NSSortDescriptor:不仅可以用来对数组进行排序,还能指定element在table view中的排序,以及CoreData中对fetchrequest返回的数据做排序处理,通过NSSortDescriptor可以通过多个key值进行排序。
3. 使用selector
以上对数组中对象间进行比较排序,实际上都是利用字符串的比较方法。
- (NSComparisonResult)compare:(NSString *)string; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange; - (NSComparisonResult)compare:(NSString *)string options:(NSStringCompareOptions)mask range:(NSRange)compareRange locale:(id)locale;
NSComparisonResult 是定义的一个枚举,定义如下:
typedef NS_ENUM(NSInteger, NSComparisonResult) {NSOrderedAscending = -1L, NSOrderedSame, NSOrderedDescending};
其中,NSOrderedSame 表示比较的两个字符串完全一致, 同时,在这个枚举中,它的值是 0.
我们如何给一个数组进行排序(数组中存储着HXPerson对象)?
下面介绍三种方法
1. 使用NSComparator:实际上是用一个block对象作比较操作,返回结果是NSComparisonResult类型(枚举)
NSArray *resultArray1 = [self.pers sortedArrayUsingComparator:^NSComparisonResult(HXPerson *obj1, HXPerson *obj2) { return [obj1.lastName compare:obj2.lastName];// 这里不仅可以利用字符串排序,也可以自定义HXPerson对象的排序方法compare:,自己接利用对象进行排序。 }];
2. 使用NSSortDescriptor:不仅可以用来对数组进行排序,还能指定element在table view中的排序,以及CoreData中对fetchrequest返回的数据做排序处理,通过NSSortDescriptor可以通过多个key值进行排序。
NSSortDescriptor *firstDes = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];// 利用firstName排序,结果:升序 NSSortDescriptor *lastDes = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:NO];// 利用lastName排序,结果:降序 NSArray *desArray = [[NSArray alloc] initWithObjects:firstDes, lastDes, nil]; // 开始排序 NSArray *resultArray2 = [self.pers sortedArrayUsingDescriptors:desArray];
3. 使用selector
NSArray *resultArray3 = [self.pers sortedArrayUsingSelector:@selector(compare:)];注意:compare:方法是要在HXPerson.m中实现的,如下:
#import "HXPerson.h" @implementation HXPerson - (NSComparisonResult)compare:(HXPerson *)per { return [self.birthDay compare:per.birthDay];// 默认按照生日的升序排序 } @end
以上对数组中对象间进行比较排序,实际上都是利用字符串的比较方法。
相关文章推荐
- iOS界面设计切图小结
- iOS_webView与JS交互
- iOS开发多线程篇—多线程简单介绍
- iOS开发-装饰模式
- <填坑手册>Vuforia上架ios,以及分享功能注意事项
- iOS开发 关于ALAsset获取图库图片分辨率iOS7/iOS9适配
- iOS开发- 相机(摄像头)获取到的图片自动旋转90度解决办法
- iOS 精度问题
- iOS库.a与.framework
- iOS沙盒路径总结及存储方法
- iOS国际化
- nagios 监控
- IOSc程序中按钮点击不灵敏 ios
- iOS 头像圆角问题
- Bios工程师手边事—SATA
- 为什么用phonegap开发iOS应用
- 深入NSTimer(iOS)
- iOS-----推送机制(下)
- 不让苹果开发者账号折磨我
- iOS NSLocale相关方法