Sortering innebär att ordna saker i rätt ordning. Sorteringsregler kan variera mycket mellan olika språkområden. Reglerna varierar också om du sorterar en lista eller matchar liknande objekt, som exempelvis i en textsökningsalgoritm.
Vid sortering är ofta små skillnader viktiga, som versala eller gemena bokstäver eller diakritiska tecken som accenter. Bokstaven "ö" (ett "o" med ett trema) tolkas ofta som bokstaven "o" i franska och engelska. Samma bokstav kommer emellertid i svenskan efter bokstaven "z". I franska och vissa andra språk avgör dessutom accenten i slutet av ett ord vilken ordning ordet ska ha i en sorterad lista.
För sökning är det ofta bäst att ignorera skillnader i versaler och gemener eller i diakritiska tecken för att kunna hitta fler relevanta träffar. En sökning efter teckenkombinationen ”cote” i ett franskt dokument ger till exempel träffar för ”cote”, ”côte” och ”coté”.
Använda klassen Collator
De huvudsakliga metoderna för klassen Collator är metoden compare(), som huvudsakligen används för sortering, och metoden equals(), som används för att matcha värden.
I följande exempel visas de olika beteendena för metoderna compare() och 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é
}
I exemplet skapas först ett Collator-objekt i sorteringsläget SORTING för språkområdet franska-Frankrike. Sedan sorteras två ord som endast skiljer sig genom diakritiska tecken. Detta visar att SORTING-jämförelsen gör skillnad mellan tecken med eller utan accent.
Sorteringen sker genom att en referens skickas till metoden sort() för Collator-objektet som en parameter till metoden Array.sort(). Den här tekniken är ett av de mest effektiva sätten att kontrollera sorteringsordningen med ett Collator-objekt.
I exemplet skapas sedan ett Collator-objekt i matchningsläget MATCHING. När de båda orden jämförs av Collator-objektet behandlas de som likvärdiga. Detta visar att MATCHING-jämförelsen inte gör någon skillnad mellan tecken med eller utan accent.
Anpassa beteendet för klassen Collator
Jämförelseregler för klassen Collator fås som standard från operativsystemet baserat på språkområde och på användarens systeminställningar. Du kan anpassa beteendet för metoderna compare() och equals() genom att explicit ange olika egenskaper. I följande tabell visas egenskaperna och vilken effekt de har på jämförelsen:
Collator-egenskap
|
Effekt
|
numericComparison
|
Definierar om numeriska tecken ska behandlas som siffror eller som text.
|
ignoreCase
|
Kontrollerar om versal- och gemenskillnader ignoreras.
|
ignoreCharacterWidth
|
Definierar om former med full bredd och halv bredd för vissa kinesiska och japanska tecken ska behandlas som likvärdiga.
|
ignoreDiacritics
|
Definierar om strängar som innehåller samma grundtecken men med olika accenter eller andra diakritiska tecken ska behandlas som likvärdiga.
|
ignoreKanaType
|
Definierar om strängar som endast skiljer sig åt genom typen av kana-tecken ska behandlas som likvärdiga.
|
ignoreSymbols
|
Definierar om symboltecken som blanksteg, valutasymboler, matematiska symboler och andra symboler ska ignoreras eller inte.
|
I följande kodexempel visas att sorteringsordningen för en lista med franska ord ändras om egenskapen ignoreDiacritics anges till 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
|
|
|