У меня есть список строк в NSMutableArray
, и я хочу отсортировать их в алфавитном порядке, прежде чем отображать их в моем представлении таблицы.
Как я могу это сделать?
У меня есть список строк в NSMutableArray
, и я хочу отсортировать их в алфавитном порядке, прежде чем отображать их в моем представлении таблицы.
Как я могу это сделать?
Ниже приведен пример работы Apple с помощью sortedArrayUsingSelector:
и localizedCaseInsensitiveCompare:
в Документация по коллекциям:
sortedArray = [anArray sortedArrayUsingSelector:
@selector(localizedCaseInsensitiveCompare:)];
Обратите внимание, что это вернет новый отсортированный массив. Если вы хотите отсортировать свой NSMutableArray
на месте, используйте вместо этого sortUsingSelector:
:
[mutableArray sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Здесь обновленный ответ для 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:
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]];
Для меня это сработало....
areas = [areas sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
Здесь области NSArray
. Надеюсь, это поможет кому-то.