Я имею NSArray
из NSNumber
объекты, что я успешно отсортировал в порядке возрастания использование следующего:
[myArray sortedArrayUsingSelector:@selector(compare:)]
Однако я должен отсортировать это в порядке убывания. Я беру его это compare:
только виды в порядке возрастания. В то время как я могу пойти об инвертировании NSArray
, Мне любопытно относительно того, существует ли более более простой или более эффективный способ идти о выполнении этого.
Править: Я нашел этот вопрос, который обеспечивает, простой способ инвертировать выполняют итерации NSArray
:
for (id someObject in [myArray reverseObjectEnumerator])
Это хорошо работает, я предполагаю, что это - хорошее простое решение, но мне любопытно относительно того, существует ли способ указать сортировку в порядке убывания.
Использовать дескриптор сортировки
NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self"
ascending: NO];
return [myArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];
Другой способ, imo, тоже неплох: напишите еще один reverseCompare с категорией:
@implementation NSNumber (Utility)
- (NSComparisonResult)reverseCompare:(NSNumber *)aNumber {
return [aNumber compare:self];
}
Хорошо то, что вы можете повторно использовать везде и не нужно писать цикл с обратная итерация. Плохо то, что приходится писать больше кода :)
Есть несколько способов:
sortUsingFunction: context:
. sortUsingComparator:
, который принимает блок. (Доступно только в Mac OS X 10.6 и новее и iOS 4.0 и новее.) sortUsingDescriptors:
и передайте массив хотя бы одного дескриптора сортировки, свойство ascending
ложный. В первых двух случаях ваше сравнение должно просто вернуть отрицание того, какой компаратор вы обычно используете (например, compare:
). Последний включает меньше настраиваемого кода, поэтому я бы его использовал.
селектор comare должен возвращать NSComparisonResult. На самом деле это ваша функция, поэтому вы можете написать другую функцию, которая возвращает противоположный результат для сортировки в порядке убывания.
Dr. На веб-сайте Touch есть хорошая реализация категории в NSArray для создания самосортированного массива. Это можно изменить, чтобы сортировка оставалась в любом подходящем порядке.