В NSString
есть удобный метод, позволяющий легко выполнять сортировку этого типа: базовый метод сравнения
NSArray *sortedArray = [myArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSString
(compare:options:range:locale:
) даету вас есть еще больше возможностей для сортировки.
Редактировать: Вот длинный рассказ:
Сначала определите функцию сравнения.Это хорошо для естественной сортировки строк:
static NSInteger comparator(id a, id b, void* context)
{
NSInteger options = NSCaseInsensitiveSearch
| NSNumericSearch // Numbers are compared using numeric value
| NSDiacriticInsensitiveSearch // Ignores diacritics (â == á == a)
| NSWidthInsensitiveSearch; // Unicode special width is ignored
return [(NSString*)a compare:b options:options];
}
Затем сортируйте массив.
NSArray* myArray = [NSArray arrayWithObjects:@"foo_002", @"fôõ_1", @"fôõ_3", @"foo_0", @"foo_1.5", nil];
NSArray* sortedArray = [myArray sortedArrayUsingFunction:comparator context:NULL];
Массив в примере содержит несколько забавных символов: числа, диакритические знаки и некоторыесимволы из диапазона Юникод ff00.Последний тип символа выглядит как символ ASCII, но напечатан с другой шириной.
Используемая функция сравнения обрабатывает все случаи предсказуемым образом.Сортированный массив имеет следующий порядок:
foo_0
fôõ_1
foo_1.5
foo_002
fôõ_3