Подтвердить что ты не робот

Сортировка массива (NSArray) в порядке убывания

У меня есть массив объектов 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:)];

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[wordsArray sortUsingDescriptors:sortDescriptors];

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

Ответ 3

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

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);