• iOS中的NSArraySort(^块语法)


    main.m

     
    //    NSArray *array =@[@"aa",@"ee",@"jj",@"mm",@"ss",@"kk"];
    //    NSLog(@"%@",array);
    //    NSArray *sortArray = [array sortedArrayUsingSelector:@selector(compare:)];
    //     NSLog(@"%@",sortArray);
    //
      
    //    Student *stu1 = [Student studentWithName:@"chi" age:15 score:45.5 stuNum:@"1234"];
    //     Student *stu2 = [Student studentWithName:@"niuniu" age:21 score:41 stuNum:@"34435"];
    //     Student *stu3 = [Student studentWithName:@"paopao" age:33 score:22 stuNum:@"2122334"];
    //     Student *stu4 = [Student studentWithName:@"doudou" age:5 score:99 stuNum:@"6172354"];
    //     NSArray *array =@[stu1,stu2,stu3,stu4];
    //      NSLog(@"%@",array);
    //     NSArray *array1 = [array sortedArrayUsingSelector:@selector(compareByName:)];
    //     NSLog(@"%@",array1);
    //    
    //    NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareByAge:)];
    //     NSLog(@"%@",array2);
    //    NSArray *array3 = [array sortedArrayUsingSelector:@selector(compareByScore:)];
    //    NSLog(@"%@",array3);
    //    NSArray *array4 = [array sortedArrayUsingSelector:@selector(compareByStuNum:)];
    //    NSLog(@"%@",array4);
    //     NSMutableArray *arrayw =[@[stu1,stu2,stu3,stu4] mutableCopy];
    //     [arrayw sortUsingSelector:@selector(compareByName:)];
    //        NSLog(@"%@",arrayw);
        
        
        
        //block块语法
        //block 可以在函数内部定义匿名函数.
        //Block -- 实现求两个数的最大值
        //int (^)(int a, int b) Block类型
    //    int (^maxBlock)(int a, int b) = ^int(int a, int b){
    //    
    //        return a > b ? a : b;
    //    };
    //    
    //    
    //    //如何掉用block
    //    int max = maxBlock(3,5);
    //    NSLog(@"%d", max);
    //    //1.定义Block 输出 I love iOS!
    //    void (^loveBlock)() = ^(){
    //        NSLog(@"I love iOS !");
    //    };
    //    
    //    //调用
    //    loveBlock();
    //    //2.定义一个block 将整形转为字符串
    //    
    //    NSString* (^zhuanhuanBloc)(int a) = ^NSString* (int a)
    //    {
    //      
    //        return [NSString stringWithFormat:@"%d",a ];
    //    
    //    };
    //    
    //    
    //    
    //    
    //    zhuanhuanBloc(4);
    //    
    //    //3.定义 BlocK实现将一个整形数转换成NSNumber对象.
    //    NSNumber* (^nsnumberBlock)(int a) = ^NSNumber* (int a)
    //    {
    //        
    //        //return @(a);
    //     
    //      return   [NSNumber numberWithInt:a];
    //        
    //    };
    //    
    //    //nsnumberBlock(3);
    //    NSLog(@"%@",nsnumberBlock(3));
    //    
    //    //4.定义Block传入字符串,放回全部大写之后的字符串对象
    //    
    //    NSString *(^bigBlock)(NSString *a) = ^NSString *(NSString *a){
    //       return [a uppercaseString];
    //    };
    //    
    //    NSLog(@"%@",bigBlock(@"jfdlskafk"));
    //    
    //    //5.定义Block 传入字符串,返回首字母大写之后的字符串对象
    //    typedef NSString *(^FistBigBlock)(NSString *a);
    //    FistBigBlock fist = ^NSString *(NSString *a){
    //        return [a capitalizedString];
    //    };
    //    
    //    NSLog(@"%@",fist(@"fdsaf"));
    //    //6.定义 Blcok实现两个字符串对象的比较
    //    typedef NSComparisonResult(^BijiaoBlock)(NSString *a,NSString *b);
    //    
    //    BijiaoBlock bijiao = ^NSComparisonResult(NSString *a,NSString *b){
    //       return [a compare:b];
    //    };
    //    if (bijiao(@"fdsa",@"fdsa") == 0) {
    //        NSLog(@"相等");
    //    }
    //
        //块排序
    //    NSArray *array1 = @[@"ss",@"zz",@"aa",@"yy"];
    //   NSArray *bb = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    //        NSString *str1 = obj1;
    //        NSString *str2 = obj2;
    //       return [str1 compare:str2];
    //    }];
    //    NSLog(@"%@",bb);
        //创建不可变数组,管理学生对象
            Student *stu1 = [Student studentWithName:@"chi" age:15 score:45.5 stuNum:@"1234"];
             Student *stu2 = [Student studentWithName:@"niuniu" age:21 score:41 stuNum:@"34435"];
             Student *stu3 = [Student studentWithName:@"paopao" age:33 score:22 stuNum:@"2122334"];
             Student *stu4 = [Student studentWithName:@"doudou" age:5 score:99 stuNum:@"6172354"];
             NSArray *array =@[stu1,stu2,stu3,stu4];
       NSArray *array1 = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            Student *stu1 = (Student *)obj1;
            Student *stu2 = (Student *)obj2;
            return [[stu1 name] compare: [stu2 name]];
        }];
        NSLog(@"%@",array1);
        //创建可变数,管理上述学生
        
        NSMutableArray *mArray = [@[stu1,stu2,stu3,stu4] mutableCopy];
        NSLog(@"%@",mArray);
        //可变数组和数组的快速排序的方法不同一个是sortUsingComparator一个是sortedArrayUsingComprator
       [mArray sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
                Student *stu1 = (Student *)obj1;
                Student *stu2 = (Student *)obj2;
    
            //NSInteger age1 = [self age];
          //  NSInteger age2 = [stu age];
            return -[@([stu1 score]) compare: @([stu2 score])];
        }];
        NSLog(@"%@",mArray);

    Student.h

    @public
        NSString *_name;
        NSInteger _age;
        CGFloat _score;
        NSString *_stuNum;
    }
    
    - (NSString *)name;
    - (NSInteger)age;
    - (CGFloat)score;
    - (NSString *)stuNum;
    
    - (id)initWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum;
    + (id)studentWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum;
    
    
    //按姓名升序
    - (NSComparisonResult)compareByName:(Student *)stu;
    
    //年龄降序
    - (NSComparisonResult)compareByAge:(Student *)stu;
    //学号对象
    - (NSComparisonResult)compareByStuNum:(Student *)stu;
    //分数降序
    - (NSComparisonResult)compareByScore:(Student *)stu;

    Student.m

    @implementation Student
    
    - (NSString *)name
    {
        return _name;
    }
    - (NSInteger)age
    {
        return _age;
    }
    - (CGFloat)score
    {
        return _score;
    }
    - (NSString *)stuNum
    {
        return _stuNum;
    }
    - (id)initWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum
    {
        if (self = [super init]) {
            _name = name;
            _age = age;
            _score = score;
            _stuNum = stuNum;
        }
        return self;
    }
    + (id)studentWithName:(NSString *)name age:(NSInteger)age score:(CGFloat)score stuNum:(NSString *)stuNum
    {
        Student *stu = [[Student alloc] initWithName:name age:age score:score stuNum:stuNum];
        return stu;
    }
    
    //按姓名升序
    - (NSComparisonResult)compareByName:(Student *)stu
    {
    
        NSString *name1 = [self name];
        NSString *name2 = [stu name];
        return [name1 compare:name2];
    
    }
    
    //年龄降序
    - (NSComparisonResult)compareByAge:(Student *)stu
    {
        NSInteger age1 = [self age];
        NSInteger age2 = [stu age];
        return -[@(age1) compare: @(age2)];
    }
    //学号对象
    - (NSComparisonResult)compareByStuNum:(Student *)stu
    {
        return [[self stuNum] compare:[stu stuNum]];
    }
    //分数降序
    - (NSComparisonResult)compareByScore:(Student *)stu
    {
        NSInteger score1 = [self score];
        NSInteger score2 = [stu score];
        return -[@(score1) compare: @(score2)];
    }
    - (NSString *)description
    {
        return [NSString stringWithFormat:@"%@,  %ld,   %@,    %.2f", _name, _age, _stuNum, _score];
    }
  • 相关阅读:
    php面试题目
    JavaScript表单处理的返回值问题
    超链接在javascript:void(0)时没有事件响应
    php 两个美元符号:可变变量
    [Ubuntu] lampp安装Zend Framework
    [Ubuntu] 安装字体
    php中bindValue 和 bindParam 的区别
    php遍历文件夹(获得文件名)
    php输出一段字符块
    PHP 全角和半角转换函数
  • 原文地址:https://www.cnblogs.com/wohaoxue/p/4723645.html
Copyright © 2020-2023  润新知