zoukankan      html  css  js  c++  java
  • Objective-C 排序

    在Objective-C中,排序分为:

    1、Foundation框架中的对象排序

    2、自定义对象排序

     例子:每个学生都有一个成绩score属性,根据成绩score对学生排序

     自定义对象 Student.h

    Student.m

    main.m

    复制代码
    #import <Foundation/Foundation.h>
    #import "Student.h"
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
            
             //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;
    
    
    @end
    复制代码

    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);
    复制代码

  • 相关阅读:
    Sum Root to Leaf Numbers
    Sum Root to Leaf Numbers
    Sort Colors
    Partition List
    Binary Tree Inorder Traversal
    Binary Tree Postorder Traversal
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Search a 2D Matrix
    leetcode221
  • 原文地址:https://www.cnblogs.com/zhangyubao/p/6994888.html
Copyright © 2011-2022 走看看