我想做的事情看起来很简单,但我在网上找不到任何答案。我有一个 NSMutableArray
对象,假设它们是“Person”对象。我想按 Person.birthDate 对 NSMutableArray
进行排序,这是一个 NSDate
。
我觉得跟这个方法有关系:
NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(???)];
在 Java 中,我会让我的对象实现 Comparable,或者将 Collections.sort 与内联自定义比较器一起使用...在 Objective-C 中你到底是如何做到这一点的?
最佳答案
要么为你的对象实现一个比较方法:
- (NSComparisonResult)compare:(Person *)otherObject {
return [self.birthDate compare:otherObject.birthDate];
}
NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)];
或者通常更好:
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"birthDate"
ascending:YES];
NSArray *sortedArray = [drinkDetails sortedArrayUsingDescriptors:@[sortDescriptor]];
您可以通过向数组中添加多个键轻松地按多个键排序。也可以使用自定义比较器方法。看看the documentation .
从 Mac OS X 10.6 和 iOS 4 开始,也可以使用 block 进行排序:
NSArray *sortedArray;
sortedArray = [drinkDetails sortedArrayUsingComparator:^NSComparisonResult(Person *a, Person *b) {
return [a.birthDate compare:b.birthDate];
}];
-compare:
和基于 block 的方法通常比使用 NSSortDescriptor
快很多,因为后者依赖于 KVC。 NSSortDescriptor
方法的主要优点是它提供了一种使用数据而不是代码来定义排序顺序的方法,这使得它很容易例如进行设置,以便用户可以通过单击标题行对 NSTableView
进行排序。
https://stackoverflow.com/questions/805547/