zoukankan      html  css  js  c++  java
  • OC NSArray的排序问题

    1.关于NSArray的排序问题,首先想到的是不是冒泡排序,插入排序.......

    oc中的NSArray有一种更简单的方式:

    例如:

    NSArray *stringArray=[NSArray arrayWithObjects:@"abc1 ",@"abc21",@"abc12",@"abc03",@"abc04", nil];

    NSComparator sotrBlock=^(id string1,id string2){

        return [string1 compare:string2];

    };

    NSArray *sortArray=[stringArray sortedArrayUsingComparator:sotrBlock];

    得到的sortArray就是排序后的数组

    2.那么问题来了,(高级排序)

    如果有一个Person类里有另外一个类的变量,比如说Person类除了name,age变量,还有一辆车Car类型,Car类里有个name属性。对Person对象进行排序,有这样的要求:按照Car的name排序,如果是同一辆车,也就是Car的name相同,那么再按照年龄进行排序,如果年龄也相同,最后按照Person的name进行排序。

    //第一步把person加入数组

     NSArray *array = [NSArray arrayWithObjects:p1,p2,p3,p4,p5, nil];//p1....p5为创建的person对象

    //第二部//我这里是:首先按照年龄排序,然后是车的名字,最后是按照人的名字

    NSSortDescriptor *carNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"car.name" ascending:YES];//构建排序描述器

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

    NSSortDescriptor *personAgeDesc = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];

    NSArray *descriptorArray = [NSArray arrayWithObjects:personAgeDesc,carNameDesc,personNameDesc, nil];

    //把排序描述器放进数组里,放入的顺序就是你想要排序的顺序

     NSArray *descriptorArray = [NSArray arrayWithObjects:personAgeDesc,carNameDesc,personNameDesc, nil];

     NSArray *sortedArray = [array sortedArrayUsingDescriptors: descriptorArray];

    sortedArray就是排序后的数组

    是不是感觉挺简单的................ 

  • 相关阅读:
    UIKit, AppKit, 以及其他API在多线程当中的使用注意事项
    BOZJ-2590 优惠券
    P3620 [APIO/CTSC 2007] 数据备份
    矩阵乘法与快速幂
    CodeForces
    AtCoder
    CodeForces
    考试成绩和学号的(结构体)排序
    CodeForces
    Atcoder Beginner Contest 092 —— C题
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/4972602.html
Copyright © 2011-2022 走看看