Альтернативы caseInsensitiveCompare sortDescriptor - PullRequest
2 голосов
/ 25 сентября 2011

У сортируемого массива есть строки, такие как:

200burgers
1apple
2burgers
11apples

и аналогичные.При сортировке по возрастанию с caseInsenstive я получаю:

11apples
1apple
200burgers
2burgers

Что имеет смысл, но я бы предпочел лексикографическую сортировку, в которой "1" стоит перед "10", "10" перед "100" и т.например:

1apple
11apples
2burgers
200burgers

Должен ли я создать собственный компаратор или есть какой-то другой вариант?

Ответы [ 2 ]

1 голос
/ 25 сентября 2011

Я думаю, вам, вероятно, понадобится пользовательский компаратор, но это будет нечто очень простое:

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES comparator:^(id one, id two) {
    return [one compare:two options:NSCaseInsensitiveSearch | NSNumericSearch];
}];
0 голосов
/ 25 сентября 2011

Если вы не можете откорректировать строку, вам придется написать собственный компаратор, чтобы найти в строке нецифровую строку и отсортировать ее в части строки, а затем в части числа.чтобы эти два элемента были отдельными объектами и использовать - (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors

, где вы будете сортировать по «строке», а затем «считать».Лексически числа не будут правильно сортироваться в составленной вами форме.

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