如何对包含自定义对象的NSMutableArray进行排序?

我想做的似乎很简单,但我在网上找不到任何答案。我有一个对象的NSMutableArray,假设它们是“Person”对象。我想按Person.birthDate对NSMutableArray进行排序,它是一个NSDate

我认为这与这种方法有关:

NSArray*sortedArray=[drinkDetails sortedArray using selector:@selector(??);

在Java中,我会让我的对象实现可比性,或者使用Collections.sort和内联自定义比较器……在Objective-C中,你到底是如何做到这一点的

比较法

或者为对象实现比较方法:

-(NSComparisonResult)比较:(Person*)其他对象{
返回[self.birthDate compare:otherObject.birthDate];
}
NSArray*sortedArray=[drinkDetails sortedArray UsingSelector:@selector(比较:)];

NSSortDescriptor(更好)

或者通常更好:

NSSortDescriptor*sortDescriptor;
sortDescriptor=[[NSSortDescriptor alloc]initWithKey:“生日”;
上升:是];
NSArray*sortedArray=[drinkDetails sortedArray使用描述符:@[sortDescriptor];

通过向数组中添加多个键,可以轻松地按多个键进行排序。使用自定义比较器方法也是可能的。请看一下文档

方块(闪亮!)

由于Mac OS X 10.6和iOS 4:

NSArray*sortedArray;
SorterDarray=[drinkDetails SorterDarray Using Comparator:^n比较结果(人员*a,人员*b){
返回[a.生日比较:b.生日];
}];

演出

-compare:和基于块的方法通常比使用NSSortDescriptor要快得多,因为后者依赖于KVC。NSSortDescriptor方法的主要优点是,它提供了一种使用数据而不是代码来定义排序顺序的方法,这使得您可以轻松地进行设置,例如,用户可以通过单击标题行对NSTableView进行排序

发表评论