Как я сортирую Массив NSMutable с NSNumbers в нем?

Я пытаюсь сделать высокую таблицу счета и высосать в массивах в цели c (на самом деле, в общей цели c сложен для меня), таким образом, я не могу выяснить, как отсортировать. Я пытаюсь сделать что-то вроде этого (speudocode, я пишу это в стиле actionscript, потому что я более доволен им):

highscores.addObjecttoArray(score)
highscores.sort(ascending)

Но я не могу понять это... Я видел другие потоки об этом, но их использование plist файлы и материал и я не знаем, что достаточно цели c учится от них.

49
задан meman32 8 July 2010 в 05:22
поделиться

2 ответа

Хотели бы вы сделать это в кратчайшие сроки?

Если у вас есть изменяемый массив экземпляров NSNumber :

NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO];
[mutableArrayOfNumbers sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]];

Красиво и просто :)

Вы также можете выполнить аналогичную сортировку с дескрипторами в неизменяемых массивах, но в итоге вы получите копию вместо сортировки на месте.

137
ответ дан 7 November 2019 в 11:15
поделиться

[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:)];

27
ответ дан 7 November 2019 в 11:15
поделиться