У меня есть массив объектов, и мне нужны они отсортированный по их ключу "заголовка". Это в настоящее время работает, хотя это использует вид ASCII вместо естественного вида. Заголовки являются именами файлов, таким образом, они похожи на это:
file1
file2
file3
...
file10
file11
file12
Я добираюсь, как Вы ожидали бы:
file1
file10
file11
file12
file2
file3
...
Кто-либо знает, существует ли путь, встроенный к NSArray сортировка функциональности для получения этой естественной сортировки в противоположность алфавитному виду? Я нашел некоторые универсальные алгоритмы, но я надеялся на что-то встроенное...
NSString
s можно сравнить с помощью NSNumericSearch сравнить вариант.
Одна версия:
NSInteger sort(Obj* a, Obj* b, void*) {
return [[a title] compare:[b title] options:NSNumericSearch];
}
result = [array sortedArrayUsingFunction:&sort context:nil];
Или немного более общая:
NSInteger sort(id a, id b, void* p) {
return [[a valueForKey:(NSString*)p]
compare:[b valueForKey:(NSString*)p]
options:NSNumericSearch];
}
result = [array sortedArrayUsingFunction:&sort context:@"title"]
Или с использованием блоков:
result = [array sortedArrayUsingComparator:^(Obj* a, Obj* b) {
return [[a title] compare:[b title] options:NSNumericSearch];
}];
Те, кто пытается воспроизвести поведение сортировки Finder в Mac OS X 10.6 и новее и iOS 4 и новее, могут использовать localizedStandardCompare:
в качестве селектора компаратора.
Те, кто преследовал ту же цель в более ранних версиях Mac OS X и / или iOS, должны использовать решение, описанное в Руководстве по программированию строк .