请查看NSMutableArray
方法sortUsingFunction:context:
你需要设置一个compare函数,该函数接受两个对象 (类型为Person
, 因为你要比较两个Person
对象) 和一个context参数。
这两个对象只是Person
的实例。第三个对象是一个字符串,例如@"birthDate"。
此函数返回一个NSComparisonResult
:如果PersonA.birthDate
< PersonB.birthDate
,则返回NSOrderedAscending
;如果PersonA.birthDate
> PersonB.birthDate
,则返回NSOrderedDescending
;最后,如果PersonA.birthDate
== PersonB.birthDate
,则返回NSOrderedSame
。
这是粗略的伪代码;你需要详细说明一个日期是如何比较大小的(例如比较从纪元开始算起的秒数等):
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;
}
如果您经常这样做,使用内联可能会稍微加快速度。
NSMutableArray
,我更喜欢使用方法sortUsingDescriptors
、sortUsingFunction
或sortUsingSelector
进行排序。由于数组是可变的,通常我不需要一个已排序的副本。 - Stephan