Смотрите NSMutableArray
методsortUsingFunction:context:
Вам нужно настроить функцию сравнения, которая принимает два объекта (типа Person
, поскольку вы сравниваете два Person
объекта) и параметр контекста .
Два объекта являются просто экземплярами Person
. Третий объект - это строка, например @ "birthDate".
Эта функция возвращает NSComparisonResult
: Возвращает , NSOrderedAscending
если PersonA.birthDate
< PersonB.birthDate
. Он вернется, NSOrderedDescending
если PersonA.birthDate
> PersonB.birthDate
. Наконец, он вернется, NSOrderedSame
если PersonA.birthDate
== PersonB.birthDate
.
Это грубый псевдокод; вам нужно будет уточнить, что означает, что одна дата «меньше», «больше» или «равна» другой дате (например, сравнение секунд с начала эпохи и т. д.):
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;
}
Встраивание может, возможно, немного ускорить это, если вы делаете это много.