Сортировка и сравнение строк

Flash Player 10.1 и более поздних версий, Adobe AIR 2.0 и более поздних версий

Упорядочение — это процесс расположения элементов в правильном порядке. Правила упорядочения значительно отличаются в зависимости от локали. Правила также отличаются в зависимости от того, выполняется сортировка элементов в списке или сопоставление аналогичных элементов, например в алгоритме поиска текста.

При сортировке небольшие различия, например строчные и прописные буквы или диактрические знаки, такие как ударения, часто играют важную роль. Например, буква ö (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