У вас есть несколько вариантов.
Возможно, самый простой способ - определить метод -compare:
для Card
, который возвращает NSComparisonResult
.Это предпочтительно, если сортировка по масти и значению является «стандартным» способом сортировки Card
.Если вы сделали это, то весь ваш метод сортировки может быть преобразован в
[deck sortUsingSelector:@selector(compare:)];
Если вы не хотите этого делать, вы можете использовать массив NSSortDescriptor
s, один для иска и один для значения.
[deck sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"suit" ascending:YES], [NSSortDescriptor sortDescriptorWithKey:@"value"] ascending:YES], nil]];
Если по какой-либо причине это не сработает, вы можете попробовать -sortUsingComparator:
[deck sortUsingComparator:^NSComparisonResult(Card *obj1, Card *obj2) {
int suit1 = [obj1 suit];
int suit2 = [obj2 suit];
if (suit1 > suit2) {
return NSOrderedDescending;
} else if (suit1 < suit2) {
return NSOrderedAscending;
} else {
id value1 = [obj1 value];
id value2 = [obj2 value];
if (value1 > value2) {
return NSOrderedDescending;
} else if (value1 < value2) {
return NSOrderedAscending;
} else {
return NSOrderedSame;
}
}
}