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
以上对数组中对象间进行比较排序,实际上都是利用字符串的比较方法。