// 1、Foundation框架中的对象排序 NSArray *arr = @[@ 12 , @ 25 , @ 15 , @ 7 , @ 18 ]; NSLog( @" 排序前: %@ " , arr); // 注意: 想使用compare方法对数组中的元素进行排序, 那么数组中的元素必须是Foundation框架中的对象, 也就是说不能是自定义对象 NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)]; NSLog( @" 排序后: %@ " , newArr); // 2、自定义对象排序 Student *stu1 = [Student new ]; stu1.score = 91 ; Student *stu2 = [Student new ]; stu2.score = 97 ; Student *stu3 = [Student new ]; stu3.score = 95 ; Student *stu4 = [Student new ]; stu4.score = 87 ; NSArray *studentArr = @[stu1, stu2, stu3, stu4]; NSLog( @" 排序前: %@ " , studentArr); // 按照学生的成绩进行排序 // 不能使用compare:方法对自定义对象进行排序 // NSArray *newArr = [arr sortedArrayUsingSelector:@selector(compare:)]; // 该方法默认会按照升序排序 NSArray *newStudentArr = [studentArr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Student *obj1, Student * obj2) { // 升序 return obj1.score > obj2.score; // 降序 // return obj1.score < obj2.score; NSLog( @" 成绩排序后: %@ " , newStudentArr); return 0 ; return 0 ;

3、自定义对象多个元素排序

JKStudent.h里面:

#import <Foundation/Foundation.h>
@interface JKStudent : NSObject
@property (nonatomic,assign) int age;
@property (nonatomic,retain) NSString *name;
-(id)initWithAge:(int)age andName:(NSString*)name;
+ (JKStudent *) studentWithAge:(int)age andName:(NSString *)name;
//排序规则
//比较年龄
-(NSComparisonResult)compare:(JKStudent*)otherStudent;
//比较姓名
-(NSComparisonResult)compareName:(JKStudent *)otherStudent;
//先年龄后姓名
-(NSComparisonResult)compareAgeAndName:(JKStudent *)otherStudent;

JKStudent.m里面:

#import "JKStudent.h"
@implementation JKStudent
-(id)initWithAge:(int)age andName:(NSString*)name{
    self = [super init];
    if (self) {
        self.age = age;
        self.name = name;
    return self;
+ (JKStudent *) studentWithAge:(int)age andName:(NSString *)name
    return [[JKStudent alloc]initWithAge:age andName:name];
-(NSString *)description{
    return [NSString stringWithFormat:@"age:%d name:%@",self.age,self.name];
//排序规则
//比较年龄
-(NSComparisonResult)compare:(JKStudent*)otherStudent{
    if(self.age>otherStudent.age){
        return NSOrderedDescending;
    }else if (self.age == otherStudent.age){
        return NSOrderedSame;
    }else{
        return NSOrderedAscending;
//比较姓名
-(NSComparisonResult)compareName:(JKStudent *)otherStudent{
    return [self.name compare:otherStudent.name];
//先年龄后姓名
-(NSComparisonResult)compareAgeAndName:(JKStudent *)otherStudent{
    //先比较年龄
    if(self.age>otherStudent.age){
        return NSOrderedDescending;
    }else if (self.age == otherStudent.age){
        //比较姓名
        return [self.name compare:otherStudent.name];
    }else{
        return NSOrderedAscending;
     //创建5个学生
        JKStudent *student1 = [JKStudent studentWithAge:12 andName:@"JACK"];
        JKStudent *student2 = [JKStudent studentWithAge:10 andName:@"LUSON"];
        JKStudent *student3 = [JKStudent studentWithAge:13 andName:@"EASON"];
        JKStudent *student4 = [JKStudent studentWithAge:12 andName:@"LINA"];
        JKStudent *student5 = [JKStudent studentWithAge:11 andName:@"KATU"];
        //初始数组
        NSArray *studentArray1 = [NSArray arrayWithObjects:student1,student2,student3,student4,student5, nil];
        NSLog(@"初始数组:%@",studentArray1);
        //按照年龄排序
        NSArray *studentArray2 = [studentArray1 sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"按照年龄排序:%@",studentArray2);
        //按照名字排序
        NSArray *studentArray3 = [studentArray1 sortedArrayUsingSelector:@selector(compareName:)];
        NSLog(@"按照名字排序:%@",studentArray3);
        //按照先年龄再名字排序
        NSArray *studentArray4 = [studentArray1 sortedArrayUsingSelector:@selector(compareAgeAndName:)];
        NSLog(@"按照先年龄再名字排序:%@",studentArray4);