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就是排序后的数组

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

  • 相关阅读:
    android OnActivityResult()的调用时机问题
    把汉化的eclipse还原为英语版的小绝招
    sunPKCS11加载动态库(转)
    android 源码分析
    android notification应用
    期待快点过去
    Linux 的Root 帐号
    C#之CMD
    更新Citrix Merchandising Server 2.2的默认Updater
    CRL的验证
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/4972602.html
Copyright © 2011-2022 走看看