Упорядочение — это процесс расположения элементов в правильном порядке. Правила упорядочения значительно отличаются в зависимости от локали. Правила также отличаются в зависимости от того, выполняется сортировка элементов в списке или сопоставление аналогичных элементов, например в алгоритме поиска текста.
При сортировке небольшие различия, например строчные и прописные буквы или диактрические знаки, такие как ударения, часто играют важную роль. Например, буква ö (o с тремой), как правило, считается эквивалентной простой букве o во французском или английском языке. Однако она должна следовать за буквой z в шведском языке. Кроме того, во французском и некоторых других языках ударение на последний слог слова определяет порядок слова в списке.
При поиске часто необходимо проигнорировать различие в регистрах или тремах для повышения вероятности нахождения подходящих совпадений. Например, можно предположить, что поиск символов cote во французском документе должен вернуть совпадения cote, côte и coté.
Использование класса Collator
Основными методами класса Collator являются compare(), используемый в большей части для сортировки, и equals(), используемый для сопоставления значений.
В следующем примере показано различное поведение методов compare() и equals().
var words:Array = new Array("coté", "côte");
var sorter:Collator = new Collator("fr-FR", CollatorMode.SORTING);
words.sort(sorter.compare);
trace(words); // côte,coté
var matcher:Collator = new Collator("fr-FR", CollatorMode.MATCHING);
if (matcher.equals(words[0], words[1]))
{
trace(words[0] + " = " + words[1]); // côte = coté
}
В примере сначала создается объект Collator в режиме SORTING для локали French-France. Затем выполняется сортировка двух слов, которые отличаются только диактрическими знаками. Этот пример показывает, что сравнение SORTING выполняется с учетом различий ударных и безударных символов.
Сортировка выполняется путем передачи ссылки на метод sort() объекта Collator в качестве параметра в метод Array.sort(). Это один из наиболее эффективных способов использования объекта Collator для управления порядком сортировки.
После этого в примере создается объект Collator в режиме MATCHING. Когда объект Collator сравнивает два слова, он считает их равнозначными. Это показывает, что при сравнении MATCHING ударные и безударные символы считаются равнозначными.
Настройка поведения класса Collator
По умолчанию в классе Collator используются правила сравнения строк, полученные из операционной системы на основе локали и пользовательских системных настроек. Можно настроить поведение методов compare() и equals() путем явного задания различных свойств. В следующей таблице перечислены свойства и их влияние на результат сравнения:
Свойство Collator
|
Эффект
|
numericComparison
|
Управляет, будут ли символы цифр считаться числами или текстом.
|
ignoreCase
|
Управляет, будут ли игнорироваться различия символов в верхнем и нижнем регистре.
|
ignoreCharacterWidth
|
Управляет, будут ли формы полной ширины и половинной ширины некоторых китайских и японских символов оцениваться как равные.
|
ignoreDiacritics
|
Определяет, считаются ли равными строки, в которых используются одинаковые базовые символы, но с различными ударениями или другими диактрическими знаками.
|
ignoreKanaType
|
Определяет, считаются ли равными строки, отличающиеся только по типу используемого символа каны.
|
ignoreSymbols
|
Управляет пропуском символов, таких как пробел, символы валюты, математические знаки и другие.
|
Следующий код показывает, что при задании для свойства ignoreDiacritics значения true изменяется порядок сортировки французских слов:
var words:Array = new Array("COTE", "coté", "côte", "Coté","cote");
var sorter:Collator = new Collator("fr-CA", CollatorMode.SORTING);
words.sort(sorter.compare);
trace(words); // cote,COTE,côte,coté,Coté
sorter.ignoreDiacritics = true;
words.sort(sorter.compare);
trace(words); // côte,coté,cote,Coté,COTE
|
|
|