Я пытаюсь отсортировать список строк по алфавиту в Objective-C. Поскольку список является венгерским, он содержит акцентированные символы (они являются частью «официального» венгерского алфавита), и они должны быть упорядочены следующим образом: a á b c d e é ...
Проблема в том, что в iOS не было бы порядка, перечисляющего как акценты, поэтому эти три строки сортируются следующим образом:
азбука
азбука
акк
Но можно отсортировать как:
азбука
акк
Abc
Я попытался отсортировать строку следующим образом:
static NSStringCompareOptions comparisonOptions =
NSCaseInsensitiveSearch | NSNumericSearch |
NSWidthInsensitiveSearch | NSForcedOrderingSearch;
NSRange string1Range = NSMakeRange(0, 4);
NSComparisonResult res = [@"Abel" compare:@"Áael" options:comparisonOptions range:string1Range locale:[[NSLocale alloc] initWithLocaleIdentifier:@"hu_HU"]];
switch (res) {
case NSOrderedAscending:
NSLog(@"Ascending");
break;
case NSOrderedDescending:
NSLog(@"Descending");
break;
default:
NSLog(@"Same");
break;
}
Результат нисходящий, поэтому он хочет поменять их местами, но не должен.
Существует элемент NSComparisionOption, называемый NSDiacriticInsensitiveSearch, который означает, что, как указано в документации, при сравнении следует игнорировать акценты и сравнивать их, как если бы это был базовый символ. К сожалению, сравнение, кажется, работает таким образом, даже без определения этой опции.
Я использую iOS версии 4.3 для iPhone.