我想做的似乎很简单,但我在网上找不到任何答案。我有一个对象的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进行排序