zoukankan      html  css  js  c++  java
  • 对数组对象按某些属性排序方法

    要排序的对象是一个联系人类,如下定义:

    1. @interface Person : NSObject 
    2. @property (nonatomic, copy) NSString *name; 
    3. @property (nonatomic, copy) NSString *surname; 
    4. @property (nonatomic, strong) NSDate *dateOfBirth; 
    5. @end 

    而数组中包含如下内容:

    1. Smith John 03/01/1984 
    2. Andersen Jane 16/03/1979 
    3. Clark Anne 13/09/1995 
    4. Smith David 19/07/1981 
    5. Johnson Rose 22/02/1989 

    方法一

    使用NSComparator进行排序

    comparator实际上是用一个block对象作比较操作。它的定义如下所示:

    1. typedef NSComparisonResult (^NSComparator)(id obj1, id obj2); 

      上面的参数(obj1、obj2)就是我们将要做比较的对象。block返回的结果为NSComparisonResult类型来表示两个对象的顺序。

      要对整个数组做排序,则需要使用NSArray的sortArrayUsingComparator:方法,如下代码所示:

      1. NSArray *sortedArray = [self.persons sortedArrayUsingComparator:^NSComparisonResult(Person *p1, Person *p2){ 
      2.     return [p1.surname compare:p2.surname]; 
      3. }]; 

      最终排序的结果如下所示:

      1. Andersen Jane 
      2. Clark Anne 
      3. Johnson Rose 
      4. Smith John 
      5. Smith David 

      方法二 

      使用NSDescriptor进行排序

      Sort descriptor不仅可以用来对数组进行排序,还能指定element在table view中的排序,以及Core Data中对fetch request返回的数据做排序处理。通过sort descriptor可以很方便的对数组进行多个key的排序。下面来看看如何对我们的数组做surname排序,然后在进行name排序:

      1. NSSortDescriptor *firstDescriptor = [[NSSortDescriptor alloc] initWithKey:@"surname" ascending:YES]; 
      2. NSSortDescriptor *secondDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; 
      3.  
      4. NSArray *sortDescriptors = [NSArray arrayWithObjects:firstDescriptor, secondDescriptor, nil]; 
      5.  
      6. NSArray *sortedArray = [self.persons sortedArrayUsingDescriptors:sortDescriptors]; 

      上面代码的排序结果如下所示:

      1. Andersen Jane 
      2. Clark Anne 
      3. Johnson Rose 
      4. Smith David 
      5. Smith John 
  • 相关阅读:
    .NET Core技术研究-HttpContext访问的正确姿势
    .NET 5 Preview 1的深度解读和跟进
    玩转VSCode-完整构建VSCode开发调试环境
    China .NET Conf 2019-.NET技术架构下的混沌工程实践
    如何做好开发自测
    .NetCore技术研究-.NET Core迁移前的准备工作
    .NetCore技术研究-一套代码同时支持.NET Framework和.NET Core
    .NetCore技术研究-ConfigurationManager在单元测试下的坑
    统一流控服务开源:基于.Net Core的流控服务
    计组:计算机为什么有反码补码?不列公式!
  • 原文地址:https://www.cnblogs.com/zhujin/p/5020028.html
Copyright © 2011-2022 走看看