Сортировка массива (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:)];
Это правильное решение? есть ли лучшее решение?
Ответы
Ответ 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);