OC-041.NSArray的数组排序

排序一般分3种方法:

1.通过选择器selector(比较方法写在对象方法内部,比较整洁,常用)

2.通过比较器,block封装代码(跟选择器类似)

3.通过属性描述器(只能用于基本数据类型和字符串,有局限性,不常用)

方法名由(sortedArray)开头

#import <Foundation/Foundation.h>//------main.m
#import "LSDog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        LSDog *dog1 = [[LSDog alloc] init];
        dog1.name = @"dog1";
        dog1.age = 1;
        LSDog *dog2 = [[LSDog alloc] init];
        dog2.name = @"dog2";
        dog2.age = 2;
        LSDog *dog3 = [[LSDog alloc] init];
        dog3.name = @"dog3";
        dog3.age = 3;
        NSArray *dogs = @[dog1,dog2,dog3];
        //1.通过选择器
        NSLog(@"%@",[dogs sortedArrayUsingSelector:@selector(compare:)]);
        //2.通过比较器 (bolck数据类型) 通过封装代码来进行排序
        NSLog(@"%@",[dogs sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
            if (dog1.age == dog2.age) {
                return [dog1.name compare:dog2.name];
            }else if (dog1.age > dog2.age){
                return NSOrderedDescending;//降序
            }else{
                return NSOrderedAscending;//升序
            }
        }]);
        //3.通过属性描述器进行排序--(只能用于基本数据类型 和 字符串)sort:分类
        //输入key 键,然后确定是否是升序
        NSSortDescriptor *ds1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
        NSSortDescriptor *ds2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
        //把属性描述器放入数组
        NSArray *arrds = @[ds1,ds2];
        //使用分拣属性方法排序
        NSLog(@"%@",[dogs sortedArrayUsingDescriptors:arrds]);
      
          }
    return 0;
}
#import <Foundation/Foundation.h>//------LSDog.h

@interface LSDog : NSObject
@property(nonatomic,copy)NSString *name;
@property(nonatomic,assign)int age;
@end
#import "LSDog.h"//------LSDog.m

@implementation LSDog
-(NSString *)description{
    return [NSString stringWithFormat:@"name = %@,age = %d",_name,_age];
}
- (NSComparisonResult) compare:(LSDog *) other{  //需要重写compare方法
    if (self.age == other.age) {
        return [self.name compare:other.name];
    }else if(self.age > other.age){
        return NSOrderedDescending;
    }else{
        return NSOrderedAscending;
    }
}
@end




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值