Как определить, с какой буквы алфавита начинается слово в Objective-C?
По заданной строке я пытаюсь определить, к какой букве алфавита она принадлежит. Например, "яблоко" входит в раздел "А". "Банан" переходит в раздел "Б". Я использую это, чтобы определить раздел:
NSRange range = [string rangeOfString:letter
options:NSAnchoredSearch |
NSCaseInsensitiveSearch |
NSDiacriticInsensitiveSearch |
NSWidthInsensitiveSearch
range:NSMakeRange(0, string.length)
locale:locale];
куда string
это строка, которую я пытаюсь и letter
это буква алфавита. Я делаю это в цикле для каждой буквы алфавита.
Он прекрасно работает, за исключением слов типа "æquo", которые должны быть вставлены в букву "A", но это не так. Что делать?
Редактировать сюжет утолщается. Я сейчас смотрю на корейский. Слово "것" должно быть заключено в букву "ㄱ". Должен быть какой-то способ сделать это, кроме поддержания огромной таблицы сопоставления.
1 ответ
Я думаю, что я понял это: я думал об этом неправильно. Вопрос не в том, начинается ли данное слово с определенной буквы алфавита. Скорее, вопрос в том, попадает ли данное слово в диапазон сортировки определенной буквы алфавита.
Например, в случае "æquo" я могу проверить, попадает ли он в диапазон сортировки раздела "A", проверив, идет ли он после "A" и идет ли он перед "B".
Apple, compare:options:range:locale:
Метод знает ответ на эти два вопроса для любой конкретной локали. В этом конкретном примере для французского это было бы да. Для другого языка, например, датского, следует сказать "нет".
Я проверил это на английском, испанском, португальском, французском, немецком и корейском, и, похоже, дает ожидаемые результаты.