Как я могу отсортировать массив строк в алфавитном порядке, если строки содержат текст? - PullRequest
7 голосов
/ 28 марта 2012

Я создаю приложение в xcode4.3 / Objective-C и столкнулся с проблемой при попытке отсортировать NSMutableArray. Я заполню его строками из базы данных sqlite. Проблема возникает со шведскими символами å, ä и ö.

Упорядоченный массив должен выглядеть примерно так: as, br, ol, st, år, ög, ös.

Но когда я использую селектор, сравните порядок так: as, år, br, ol, ög, ös, st.

А когда я использую локализованный, сравните изменение порядка: as, år, br, ög, ol, ös, st.

В соответствии с более старыми потоками, localizedCompare должно быть решением, но я не могу заставить его работать правильно. Если я использую терминал для доступа к базе данных sqlite и наберу ORDER, я получу правильный результат. Может ли моя проблема быть связана с некоторыми настройками в xcode или симуляторе iphone, поскольку ни один из них не отображает правильный порядок? Или это локализованное сравнение по неверному пути? Я с радостью приму любые обходные пути, если это будет сделано. Спасибо.

1 Ответ

13 голосов
/ 10 апреля 2012

Вы можете заставить его работать, используя compare:options:range:locale: и явно указав шведский язык, например:

NSArray *strings=[NSArray arrayWithObjects:@"as", @"ol", @"st", @"br", @"ög", @"år", @"ös", nil];
NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"];

NSArray *sorted=[strings sortedArrayUsingComparator:^(NSString *first, NSString *second) {
    return [first compare:second
                  options:0
                    range:NSMakeRange(0, [first length])
                   locale:locale];
}];

for (NSString *s in sorted) { NSLog(@"%@", s); }

Вывод:

2012-04-10 08:08:18.139 Untitled[32416:707] as
2012-04-10 08:08:18.140 Untitled[32416:707] br
2012-04-10 08:08:18.141 Untitled[32416:707] ol
2012-04-10 08:08:18.142 Untitled[32416:707] st
2012-04-10 08:08:18.142 Untitled[32416:707] år
2012-04-10 08:08:18.143 Untitled[32416:707] ög
2012-04-10 08:08:18.143 Untitled[32416:707] ös
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...