码迷,mamicode.com
首页 > 编程语言 > 详细

对数组对象按某些属性排序方法

时间:2015-12-04 18:05:50      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

 

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

  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 

对数组对象按某些属性排序方法

标签:

原文地址:http://www.cnblogs.com/zhujin/p/5020028.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!