我想做的事情似乎很简单,但我在网上找不到任何答案。我有一个对象的NSMutableArray,假设它们是Person对象。我想对NSMutableArray按Person排序。birthDate是一个NSDate。
我认为这与这个方法有关:
NSArray *sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(???)];
在Java中,我将使我的对象实现Comparable,或使用集合。使用内联自定义比较器排序…在Objective-C中怎么做呢?
参见NSMutableArray方法sortUsingFunction:context:
您将需要设置一个compare函数,该函数接受两个对象(类型为Person,因为您正在比较两个Person对象)和一个上下文参数。
这两个对象只是Person的实例。第三个对象是字符串,例如@"birthDate"。
这个函数返回一个NSComparisonResult:如果是PersonA,则返回NSOrderedAscending。birthDate < person .birthDate。它将返回nsordereddescent如果PersonA。person .birthDate。最后,它将返回NSOrderedSame如果PersonA。birthDate == person .birthDate。
这是粗略的伪代码;你需要充实一个日期“更少”、“更多”或“等于”另一个日期的含义(比如比较从epoch开始的秒数等):
NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
if ([firstPerson birthDate] < [secondPerson birthDate])
return NSOrderedAscending;
else if ([firstPerson birthDate] > [secondPerson birthDate])
return NSOrderedDescending;
else
return NSOrderedSame;
}
如果你想要一些更紧凑的东西,你可以使用三元运算符:
NSComparisonResult compare(Person *firstPerson, Person *secondPerson, void *context) {
return ([firstPerson birthDate] < [secondPerson birthDate]) ? NSOrderedAscending : ([firstPerson birthDate] > [secondPerson birthDate]) ? NSOrderedDescending : NSOrderedSame;
}
内联可能会加快这一点,如果你这样做了很多。