您的位置:首页 > 移动开发 > IOS开发

iOS开发之数组排序

2016-01-04 12:58 357 查看
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


以上对数组中对象间进行比较排序,实际上都是利用字符串的比较方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: