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

以上对数组中对象间进行比较排序,实际上都是利用字符串的比较方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值