Как ударные строки могут быть отсортированы в Objective-C таким образом, что бы они всегда следовали за базовым символом? - PullRequest
2 голосов
/ 08 июня 2011

Я пытаюсь отсортировать список строк по алфавиту в 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.

...