iOS开发之数组排序
NSString有多个compare相关方法:
- (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
以上对数组中对象间进行比较排序,实际上都是利用字符串的比较方法。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: 自主研发异步通信框架Minma(支持长连接和短连接)
- 下一篇: 实用IT英语 积累