Sortera och jämföra strängar

Flash Player 10.1 och senare, Adobe AIR 2.0 och senare

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