sortUsingDescriptors与sortUsingSelector排序

这篇博客介绍了Objective-C中如何使用`sortUsingDescriptors`和`sortUsingSelector`方法对对象进行排序。通过创建`Student`类,展示了如何根据名字和自定义比较方法对学生成员进行升序排序。博客还涵盖了可变和不可变数组的排序,并给出了使用`sortedArrayUsingDescriptors`方法的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#import <Foundation/Foundation.h>


@interface Student : NSObject


@property (retain,nonatomic) NSString *name;

@property (assign,nonatomic)int age;


- (void) setAge: (int)newAge;

- (NSComparisonResult)myCompare: (id)anObject;


+ (Student *)studentWithName:(NSString *)n andAge:(int)a;


@end



#import "Student.h"


@implementation Student


@synthesize name,age;

+ (Student *)studentWithName:(NSString *)n andAge:(int)a{

    Student *student = [[Student alloc] init];

    student.name=n;

    student.age=a;

    return [student autorelease];

}

//重写父类description

- (NSString *)description{

    return [NSString stringWithFormat:@"我叫%@,我今年%d岁了!",self.name,self.age];

}

- (NSComparisonResult)myCompare: (id)anObject{

    //以名字来排序

    NSComparisonResult result = [[self name]compare:[anObject name]];

    return result;

}

- (void) setAge: (int)newAge{

    if (newAge<0) {

//        NSLog(@"岁数不合适");

        age=18;

    }else{

        age=newAge;

    }

}

@end



#import <Foundation/Foundation.h>

#import "Student.h"

void sort(id arr){

    for (id obj in arr) {

        NSLog(@"%@",obj);

    }

}

int main(int argc, const char * argv[])

{

    @autoreleasepool {

        Student *stu1 = [Student studentWithName:@"大胖" andAge:-3];

        Student *stu2 = [Student studentWithName:@"二胖" andAge:24];

        Student *stu3 = [Student studentWithName:@"小胖" andAge:23];

        NSMutableArray *mArr = [NSMutableArray arrayWithObjects:stu1,stu2,stu3, nil];

        sort(mArr);

        //使用sortUsingDescriptors排序

        //定义一个排序描述符对象

        NSSortDescriptor *sd1 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:1];

        //定义一个数组,arr1用来盛放排序条件

        NSArray *arr1 = [NSArray arrayWithObjects:sd1, nil];

        //进行排序

        [mArr sortUsingDescriptors:arr1];

        NSLog(@"-------排序后------");

        sort(mArr);

        /*----------------------------------------------------*/

        //对于不可变数组的排序

        NSArray *arr2 = [NSArray arrayWithObjects:stu1,stu2,stu3, nil];

        //arr2排序前

        NSLog(@"+++不可变数组排序前的数据+++");

        sort(arr2);

        //进行排序

        NSArray *arr3 = [arr2 sortedArrayUsingDescriptors:arr1];

        NSLog(@"+++不可变数组排序后的数据+++");

        sort(arr3);

        /*----------------------------------------------------*/

        

        

        //使用sortUsingSelector方法

        NSLog(@"=========================");

        NSMutableArray *mArr3 = [NSMutableArray arrayWithObjects:stu1,stu2,stu3, nil];

        [mArr3 sortUsingSelector:@selector(myCompare:)];

        sort(mArr3);

        

        

        //使用selector进行字符串排序

        NSMutableArray *mArr4 = [[NSMutableArray alloc] initWithObjects:@"Arc",@"cfo",@"hBl",@"Pon", nil];

        [mArr4 sortUsingSelector:@selector(compare:)];

        NSLog(@"对字符排序后的结果为");

        sort(mArr4);


    }

    return 0;

}


总结:对比两种排序    未完待续。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值