zoukankan      html  css  js  c++  java
  • NSArray排序方法讲解

    最麻烦的是sortedArrayUsingSelector:,其次是sortedArrayUsingDescriptors:,最容易使用的就是sortedArrayUsingComparator:

    从最容易使用的开始吧:

     1 #pragma mark -----   数组排序方式1:sortedArrayUsingComparator:   【block方式的排序是最简单的】
     2     
     3     //原始数组
     4     NSArray *array = @[@"b",@"a",@"x",@"o",@"0",@"g"];
     5     
     6     //排序数组
     7     NSArray *sort = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
     8         NSString *str1 = obj1;
     9         NSString *str2 = obj2;
    10         return [str1 compare:str2];
    11     }];
    12     
    13     //打印排序数组
    14     [sort enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    15         MyLog(@"%@",obj);
    16     }];

    下面一行就解决了,太esay了

    要对什么类型的对象排序,就用什么类型的对象接收就行了

    是不是简单过头了呢.

    请记住,用block排序是最简单的方式!

    下面来试试sortedArrayUsingDescriptors:这个方法.

    sortedArrayUsingDescriptors:一般用来给Model进行排序,block也能对Model进行排序.先给出Model的定义(看教程不要太懒,自己敲代码吧)

    以下是排序的代码:

     1 #pragma mark -------  数组排序方式2:sortedArrayUsingDescriptors:给Model排序
     2     
     3     //原始数组
     4     NSArray *modelArray = @[[PersonModel name:@"YuanYuan" age:@22 height:165],
     5                             [PersonModel name:@"DaChao" age:@24 height:179],
     6                             [PersonModel name:@"XiaoMing" age:@12 height:155],
     7                             [PersonModel name:@"ZhangSan" age:@28 height:186],
     8                             [PersonModel name:@"GaoZeBing" age:@23 height:172]];
     9     
    10     
    11     //排序描述信息
    12     NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    13     NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
    14     NSArray *sortedArray = [modelArray sortedArrayUsingDescriptors:sortDescriptors];
    15     
    16     //打印排序信息
    17     [sortedArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    18         PersonModel *tmp = obj;
    19         MyLog(@"%@",tmp.name);
    20     }];

    看下图,其实呢,NSSortDescriptor只是一个获取keyPath的工具,他能根据keyPath进行排序而已,仅此而已:)

    看一下打印信息

    2014-07-04 11:09:00.494 NSArraySorted[1784:60b] DaChao
    2014-07-04 11:09:00.496 NSArraySorted[1784:60b] GaoZeBing
    2014-07-04 11:09:00.496 NSArraySorted[1784:60b] XiaoMing
    2014-07-04 11:09:00.496 NSArraySorted[1784:60b] YuanYuan
    2014-07-04 11:09:00.497 NSArraySorted[1784:60b] ZhangSan

    很easy吧.

    这种东西还是封装成类目比较好的样子.

    使用:

     1  //原始数组
     2     NSArray *modelArray = @[[PersonModel name:@"YuanYuan" age:@22 height:165],
     3                             [PersonModel name:@"DaChao" age:@24 height:179],
     4                             [PersonModel name:@"XiaoMing" age:@12 height:155],
     5                             [PersonModel name:@"ZhangSan" age:@28 height:186],
     6                             [PersonModel name:@"GaoZeBing" age:@23 height:172]];
     7   NSArray *sortedChangeArray = [modelArray sortedWithKeyPath:@"age" ascending:YES];
     8     
     9     [sortedChangeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    10         PersonModel *tmp = obj;
    11         MyLog(@"%@",tmp.age);
    12     }];
    13     

    一句话就能实现排序,多简单:),开发就得隐藏不必要的繁文缛节,减少不必要的干扰才是正道.

    第三种方法sortedArrayUsingSelector:,也许是你最常用的方法,这个我就不讲了,我觉得太麻烦了,还得另外写一个比较的方法......

    总结:

    ==本人倾向于这么用==

    1. 优先用block排序

    2. 用NSSortDescriptor的keyPath排序

    3. 再不济请用sortedArrayUsingSelector:方法排序

     

  • 相关阅读:
    JavaScript 将行结构数据转化为树结构数据源(高效转化方案)
    转—记录一下获取NC程序名称的方法
    选择对象单开图层
    找体的顶平面
    关闭当前工作部件
    对同一高度的体着色
    NX二次开发,对象上色
    隐藏同色对象
    线性移动更新
    NX 二次开发,线性移动uf5943
  • 原文地址:https://www.cnblogs.com/yuanyuandachao/p/3824062.html
Copyright © 2011-2022 走看看