Я пытаюсь сделать высокую таблицу счета и высосать в массивах в цели c (на самом деле, в общей цели c сложен для меня), таким образом, я не могу выяснить, как отсортировать. Я пытаюсь сделать что-то вроде этого (speudocode, я пишу это в стиле actionscript, потому что я более доволен им):
highscores.addObjecttoArray(score)
highscores.sort(ascending)
Но я не могу понять это... Я видел другие потоки об этом, но их использование plist файлы и материал и я не знаем, что достаточно цели c учится от них.
Хотели бы вы сделать это в кратчайшие сроки?
Если у вас есть изменяемый массив экземпляров NSNumber
:
NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO];
[mutableArrayOfNumbers sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];
Красиво и просто :)
Вы также можете выполнить аналогичную сортировку с дескрипторами в неизменяемых массивах, но в итоге вы получите копию вместо сортировки на месте.
[highscores sortUsingSelector:@selector(compare:)];
Должно работать, если они определенно все NSNumber
ы.
(Добавление объекта:
[highscores addObject:score];
)
Если вы хотите сортировать по убыванию (самый высокий-первый):
10.6/iOS 4:
[highscores sortUsingComparator:^(id obj1, id obj2) {
if (obj1 > obj2)
return NSOrderedAscending;
else if (obj1 < obj2)
return NSOrderedDescending;
return NSOrderedSame;
}];
В противном случае вы можете определить метод категории, например:
@interface NSNumber (CustomSorting)
- (NSComparisonResult)reverseCompare:(NSNumber *)otherNumber;
@end
@implementation NSMutableArray (CustomSorting)
- (NSComparisonResult)reverseCompare:(NSNumber *)otherNumber {
return [otherNumber compare:self];
}
@end
И вызвать его:
[highscores sortUsingSelector:@selector(reverseCompare:)];