zoukankan      html  css  js  c++  java
  • OC 集合排序

    数组排序:

    //Student类里面只是声明公共NSString *name,NSInteger age变量

    //Student.m文件里面重写-(NSString *)description函数

    //写  return [NSString stringWithFormat:@"%@,%ld",name,age];

    //这条代码是为了后面输出的时候看name和age

    Student* stu1=[Student new];

    stu1->name=@"ggg";

    stu1->age=33;

    Student* stu2=[Student new];

    stu2->name=@"dd";

    stu2->age=22;

    //排序器,第一个参数指明排序的依据,第二个指明排序的升降序

    NSSortDescriptor* des1=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];

    NSSortDescriptor* des2=[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:NO];

    //不可变数组NSArray

    NSArray *arr1=@[stu1,stu2];

    //由于NSArray是不可变数组,所以要创建一个新的数组来接收返回值

    NSArray *arr2=[arr1 sortedArrayUsingDescriptors:@[des1,des2]];//arr2已经排好序

    //可变数组:NSMutableArray

    NSMutableArray* marr1=[[NSMutableArray alloc]initWithObjects:stu1,stu2,nil];

    //可变数组不用创建新的数组

    [marr1 sortUsingDescriptors:@[des1,des2]];

    //输出

    NSLog(@"%@",arr1);

    NSLog(@"%@",arr2);

    NSLog(@"%@",marr1);

    自定义方法排序:

    在Student.h文件添加:-(NSComparisonResult)compare:(Student* )otherStu;

    在Student.m文件实现:

    -(NSComparisonResult)compare:(Student *)otherStu

    {

        //假设以名字来排序

        NSComparisonResult rst=[name compare:otherStu->name];//原有的name跟传进来的name 比较

        NSLog(@"asdfasf");

        return rst;

    }

    在main文件实现

    NSMutableArray *marr3=maar2;

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

    NSLog(@"marr3:%@",marr3);

    代码块排序:

    首先复习下代码块的内容:

    //代码块跟C语言里面的函数差不多

    //1.声明代码块:

    //三要素:返回值、代码块名、参数列表

    //没有参数也要写一个()

    void (^hello)();//返回值是void,代码块名是hello,没有参数

    hello=^{

      NSLog(@"hello");

    };//后面记得分号

    int (^sum)(int ,int )=^(int a,int b){

      return a+b;

    };//有参数的代码块

    //调用代码块:

     NSLog(@"%d", sum(3,5));//输出8

    //下面是利用代码块的排序:

    //随便输入一些字母

    NSMutableArray* marr=[NSMutableArray arrayWithObjects:@"asdasd",@"sadasfg",@"ryerqwr",nil];

    //用系统提供的代码块:

    [marr sortUsingComparator:^NSComparisonResult(id obj1,id obj2)

    {

    NSComparisonResult result=[obj1 compare:obj2];//字符串的比较

    return result;

    }];

    NSLog(@"marr:%@",marr);//这样就排序好了,是不是很简单?

    //但这种方发不能排序int类型,下面介绍自定义代码块排序

    NSMutableArray* marr2=[NSMutableArray arrayWithObjects:@234,@43534,@5435,nil];

    //自定义一个比较的代码块:

    //分析参数类型,NSMutableArray里面是对象,所以参数是封装的NSInteger类型,所以参数是NSNumber。

    NSComparisonResult (^numComper)(NSNumber*,NSNumber*)=^(NSNumber*num1,NSNumber*num2)

    {   

           return (NSComparisonResult)(num1.intValue - num2.intValue);//比较的时候需要解除封装,返回值不同所以需要强转  

    };

    [marr2 sortUsingComparator:numComper];

    NSLog(@"marr2=%@",marr2);

  • 相关阅读:
    可分离卷积详解及计算量 Basic Introduction to Separable Convolutions
    全面解读Group Normalization,对比BN,LN,IN
    高斯混合模型(GMM)及MATLAB代码
    VLAD算法浅析, BOF、FV比较
    MATLAB 可以画的各种类型的图总结
    检测算法简介及其原理——fast R-CNN,faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3
    深度学习图像配准 Image Registration: From SIFT to Deep Learning
    在IIS7里配置 ISAPI,运行dll程序,总提示下载dll
    iis7下配置php出现404.17错误的解决办法
    C# Acrobat打开pdf出错,提示Acrobat.AcroPDDocClass不能强制转换为Acrobat.CAcroPDDoc,使用com组件{9B4CD3E7-4981-101B-9CA8-9240CE2738AE},HRESULT: 0x80004002
  • 原文地址:https://www.cnblogs.com/mojiewei/p/4786728.html
Copyright © 2011-2022 走看看