Сортировка по строке и с плавающей точкой не работает
У меня есть поля имени и расстояния в массиве данных, которые я хочу отсортировать; Я могу сортировать по одному, но не по обоим вместе. Я хочу, чтобы данные сначала сортировались по имени, а затем по расстоянию, но когда я использую их вместе, сортировка всегда выполняется по первому дескриптору в списке, а вторая, похоже, игнорируется.
NSSortDescriptor *nameSort = [[NSSortDescriptor alloc]
initWithKey:@"NAME"
ascending:YES
selector:@selector(localizedStandardCompare:)];
NSSortDescriptor *distanceSort = [[NSSortDescriptor alloc]
initWithKey:@"DISTANCE"
ascending:YES];
sortedArray = [featureSet.features sortedArrayUsingDescriptors:@[nameSort, distanceSort]];
[super.tableView reloadData];
1 ответ
Поведение, которое вы видите, определенно имеет смысл - "A&W #0338" предшествует "A&W #0339", поэтому больше ничего не нужно определять для сортировки расстояния.
Если все ваши данные структурированы таким образом - имя, за которым следует #000, - вы можете убрать числа для сортировки, и тогда ваша дистанционная сортировка сможет выполнить свою работу. Вы можете сделать это на уровне модели, разделив заголовок на два свойства: имя и номер местоположения, или вы можете сделать это внутри дескриптора сортировки.
NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES comparator:^NSComparisonResult(NSString *str1, NSString *str2) {
NSString *title1 = [[str1 componentsSeparatedByString:@" #"] firstObject];
NSString *title2 = [[str2 componentsSeparatedByString:@" #"] firstObject];
return [title1 compare:title2];
}];
Если вы используете эту сортировку по имени и ваша сортировка по расстоянию, "A&W #0338", то после "A & W # 0339" появится "25 км".