Как я могу отсортировать строки в NSMutableArray в алфавитном порядке? - PullRequest
42 голосов
/ 11 июня 2011

У меня есть список строк в NSMutableArray, и я хочу отсортировать их в алфавитном порядке, прежде чем отображать их в виде таблицы.

Как я могу это сделать?

Ответы [ 4 ]

128 голосов
/ 11 июня 2011

Существует следующий рабочий пример Apple, использующий sortedArrayUsingSelector: и localizedCaseInsensitiveCompare: в документации :

sortedArray = [anArray sortedArrayUsingSelector:
                       @selector(localizedCaseInsensitiveCompare:)];

Обратите внимание, что это вернет новый отсортированный массив. Если вы хотите отсортировать NSMutableArray на месте, используйте вместо этого sortUsingSelector:, например:

[mutableArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
8 голосов
/ 18 августа 2014

Вот обновленный ответ для Swift :

  • Сортировка может быть выполнена в Swift с помощью замыканий. Есть два метода - sort и sorted, которые облегчают это.

    var unsortedArray = [ "H", "ello", "Wo", "rl", "d"]
    var sortedArray = unsortedArray.sorted { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
    

    Примечание: здесь sorted вернет отсортированный массив. Сам unsortedArray не будет отсортирован.

  • Если вы хотите отсортировать unsortedArray, используйте это

    unsortedArray.sort { $0.localizedCaseInsensitiveCompare($1) == NSComparisonResult.OrderedAscending }
    


Ссылка:
  • Здесь - документация по методам сортировки Swift.

  • Документы для различных String методов сравнения здесь .


Дополнительно

Вместо использования localizedCaseInsensitiveCompare это также можно сделать:

stringArray.sort{ $0.lowercaseString < $1.lowercaseString }

или даже

stringArray.sort{ $0 < $1 }

если вы хотите сравнение с учетом регистра

1 голос
/ 22 февраля 2016

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

Модель 1:

NSSortDescriptor *sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]];

Если вы хотите, чтобы сортировка не чувствительна к регистру, вам необходимо установить дескриптор следующим образом ,,
Модель2:

NSSortDescriptor * sortDesc = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
sortedArray=[yourArray sortedArrayUsingDescriptors:@[sortDesc]];
0 голосов
/ 07 июля 2015

Для меня это сработало ....

areas = [areas sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

Здесь области NSArray. Надеюсь, это кому-нибудь поможет.

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