iOS中对NSArray中自定义的对象进行排序

澳门新葡亰网站注册 1

我们开发的每个程序都会使用到一些数据,而这些数据一般被封装在一个自定义的类中。例如一个音乐程序可能会有一个Song类,聊天程序则又一个
Friend类,点菜程序会有一个Recipe类等。有时候我们希望在程序中显示的列表数据是按照一定顺序进行排列的,本文我们就来看看在iOS中有哪些
方法可以对NSArray中的对象进行排序。下面是目录:

澳门新葡亰网站注册 1

  • 小引
  • 使用NSComparator进行排序
  • 使用NSDescriptor进行排序
  • 使用selector进行排序

图片源自网络

小引

我们将要排序的对象是一个Persion类,如下定义:

@interface Person : NSObject 
@property (nonatomic, copy) NSString *name; 
@property (nonatomic, copy) NSString *surname; 
@property (nonatomic, strong) NSDate *dateOfBirth; 
@end

澳门新葡亰网站注册,而数组中包含如下内容:

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

排序规则描述类: NSSortDescriptor

  • NSSortDescriptor来指定排序规则, 对集合等进行排序时指定结果的排序规则
  • 可以对一个类的某个属性(下文中方法中的key参数)指定排序规则,
  • 可以对一个字符串集合进行指定排序规则, 这时,
    只需要把参数key赋值为nil即可.

在iOS的集合中,都有相应的扩展方法来使用NSSortDescriptor:

  • NSSet

    -NSArray<ObjectType> *)sortedArrayUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors
    
  • NSArray

    -(NSArray<ObjectType> *)sortedArrayUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors;
    
  • NSOrderedSet

    -(NSArray<ObjectType> *)sortedArrayUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors
    
  • NSMutableArray

    -(void)sortUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors;
    
  • NSMutableOrderedSet

    -(void)sortUsingDescriptors:(NSArray<NSSortDescriptor *> *)sortDescriptors
    
其中的参数都是包含NSSortDescriptor的数组, 意味着我们可以同时指定多条规则来进行排序;(其优先级取决于在数组中的先后顺序)