Flash Player 10.1 i nowsze wersje, Adobe AIR 2.0 i nowsze wersje
Układanie to proces porządkowania elementów w prawidłowej kolejności. Reguły układania różnią się w zależności od ustawienia narodowego. Inne reguły obowiązują przy sortowaniu list, a inne przy dopasowywaniu podobnych elementów, np. w algorytmie wyszukiwania tekstu.
Podczas sortowania nawet niewielkie różnice takie, jak np. wielkie lub małe litery czy też znaki diakrytyczne takie, jak akcenty, mają często duże znaczenie. Na przykład litera ö (o umlaut) jest uznawana za najbardziej zbliżoną do zwykłej litery o w języku francuskim lub angielskim. Jednak w języku szwedzkim litera ta następuje po literze z. Ponadto w języku francuskim i innych językach różnica w ostatnim akcencie w słowie decyduje o jego kolejności na posortowanej liście.
Podczas wyszukiwania często pożądane jest nieuwzględnianie wielkości liter lub znaków diakrytycznych w celu zwiększenia prawdopodobieństwa uzyskania oczekiwanych wyników. Na przykład, wyszukiwanie znaków „cote” we dokumencie francuskojęzycznym prawdopodobnie zwróci wyniki: „cote”, „côte” i „coté”.
Korzystanie z klasy Collator
Główne metody klasy Collator to metoda compare() służąca przeważnie do sortowania oraz metoda equals() służąca do uzgadniania wartości.
Poniżej przedstawiono różne działanie metod compare() i 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é
}
W pierwszym przykładzie najpierw tworzony jest obiekt Collator w trybie SORTING dla ustawienia narodowego francuski-Francja. Dalej następuje sortowanie dwóch słów różniących się od siebie tylko znakami diakrytycznymi. Widać, że w porównaniu SORTING rozróżniane są znaki akcentowane i nieakcentowane.
Sortowanie odbywa się poprzez przekazanie odniesienia do metody sort() obiektu Collator jako parametru do metody Array.sort(). Jest to jeden z najskuteczniejszych sposobów wykorzystywania obiektu Collator do sterowania kolejnością sortowania.
Następnie w przykładzie tworzony jest obiekt Collator w trybie MATCHING. Gdy oba słowa zostaną porównane przez obiekt Collator, będą traktowane jako równe. Pokazuje to, że porównanie MATCHING traktuje znaki akcentowane i nieakcentowane równoważnie.
Dostosowywanie działania klasy Collator
Domyślnie klasa Collator wykorzystuje reguły porównywania ciągów uzyskane z systemu operacyjnego na podstawie ustawienia narodowego i preferencji systemowych użytkownika. Można dostosować działanie metod compare() i equals() poprzez jawne skonfigurowanie różnych wartości. W poniższej tabeli wymienione zostały właściwości i ich wpływ na porównania.
Właściwość Collator
|
Efekt
|
numericComparison
|
Określa, czy znaki cyfrowe są traktowane jako liczby, czy jako tekst.
|
ignoreCase
|
Określa, czy różnice wielkości znaków są ignorowane, czy nie.
|
ignoreCharacterWidth
|
Określa, czy formy pełne i skrótowe niektórych znaków chińskich i japońskich są oceniane jako równoważne.
|
ignoreDiacritics
|
Określa, czy ciągi zawierające te same znaki podstawowe, lecz różne akcenty lub inne znaki diakrytyczne, są oceniane jako równoważne.
|
ignoreKanaType
|
Określa, czy ciągi różniące się tylko zastosowanym typem znaku kana są traktowane jako równoważne.
|
ignoreSymbols
|
Określa, czy znaki symboli takie, jak spacje, symbole waluty, symbole matematyczne i inne są ignorowane.
|
Poniższy kod przedstawia, jak ustawienie właściwości ignoreDiacritics na wartość true zmienia kolejność sortowania listy francuskich słów:
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
|
|
|