Сортировка массива (NSArray) в порядке убывания - PullRequest
21 голосов
/ 21 декабря 2009

У меня есть массив объектов NSString, которые я должен отсортировать по убыванию.

Поскольку я не нашел API для сортировки массива в порядке убывания, я подошел следующим образом.

Я написал категорию для NSString, как указано ниже.

- (NSComparisonResult)CompareDescending:(NSString *)aString
{

    NSComparisonResult returnResult = NSOrderedSame;

    returnResult = [self compare:aString];

    if(NSOrderedAscending == returnResult)
        returnResult = NSOrderedDescending;
    else if(NSOrderedDescending == returnResult)
        returnResult = NSOrderedAscending;

    return returnResult;
}

Затем я отсортировал массив с помощью оператора

NSArray *sortedArray = [inFileTypes sortedArrayUsingSelector:@selector(CompareDescending:)];

Это правильное решение? есть ли лучшее решение?

Ответы [ 3 ]

54 голосов
/ 21 декабря 2009

Вы можете использовать NSSortDescriptor:

NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:NO selector:@selector(localizedCompare:)];
NSArray* sortedArray = [inFileTypes sortedArrayUsingDescriptors:@[sortDescriptor]];

Здесь мы используем localizedCompare: для сравнения строк и передаем NO в порядке возрастания: сортировать в порядке убывания.

5 голосов
/ 11 августа 2015

или упростите ваше решение:

NSArray *temp = [[NSArray alloc] initWithObjects:@"b", @"c", @"5", @"d", @"85", nil];
NSArray *sortedArray = [temp  sortedArrayUsingComparator:
                        ^NSComparisonResult(id obj1, id obj2){
                            //descending order
                            return [obj2 compare:obj1]; 
                            //ascending order
                            return [obj1 compare:obj2];
                        }];
NSLog(@"%@", sortedArray);
4 голосов
/ 21 ноября 2012
NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[wordsArray sortUsingDescriptors:sortDescriptors];

Используя этот код, мы можем отсортировать массив в порядке убывания по длине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...