Reeksen sorteren en vergelijken

Flash Player 10.1 of hoger, Adobe AIR 2.0 of hoger

Sorteren is het proces waarbij items in de juiste volgorde worden geplaatst. De regels voor het sorteren verschillen per landinstelling. Er gelden weer andere regels als u lijsten of overeenkomstige items sorteert, zoals bij een zoekalgoritme voor tekst.

Bij het sorteren zijn kleine verschillen, zoals hoofdletters of kleine letters en het gebruik van diakritische tekens zoals accenten vaak heel belangrijk. De letter ö (o met een trema) wordt in het Frans en Engels beschouwd als praktisch gelijk aan de gewone letter o. In het Zweeds volgt deze letter echter altijd op de letter z. In het Frans (en ook in sommige andere talen) bepaalt het accent ook de plaats van een woord in een gesorteerde lijst.

Bij het zoeken wilt u vaak de verschillen in hoofdletters en kleine letters of het gebruik van diakritische tekens negeren. Zo hebt u namelijk een grotere kans om relevante overeenkomsten te vinden. Als u bijvoorbeeld zoekt naar de tekens “cote” in een Frans document, worden in dat geval ook de woorden “cote”, “côte” en “coté” geretourneerd.

De klasse Collator gebruiken

De belangrijkste methoden van de Collator-klasse zijn de compare()-methode, voornamelijk gebruikt voor sorteren, en de equals()-methode, gebruikt om te zoeken naar overeenkomstige waarden.

In het volgende voorbeeld wordt het verschil tussen de compare()-methode en equals()-methode duidelijk.

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é 
}

In het voorbeeld wordt eerste een Collator-object gemaakt in de modus SORTING voor de landinstelling Frans-Frankrijk. Vervolgens worden twee woorden gesorteerd die alleen verschillende diakritische tekens gebruiken. Dit geeft aan dat de SORTING-vergelijking een onderscheid maakt tussen tekens met of zonder accent.

Het sorteren gebeurt doordat een referentie naar de sort()-methode van het Collator-object wordt doorgegeven naar de Array.sort()-methode. Deze techniek biedt een van de meest efficiënte manieren om een Collator-object toe te passen bij het bepalen van de sorteervolgorde.

In het voorbeeld wordt nu een Collator-object gemaakt in de modus MATCHING. Wanneer beide woorden worden vergeleken door het Collator-object, worden ze als gelijkwaardig behandeld. Dit toont aan dat de MATCHING-vergelijking tekens met en zonder accent als identiek beschouwt.

Het gedrag van de Collator-klasse aanpassen

Standaard gebruikt de Collator-klasse vergelijkingsregels voor tekenreeksen die worden verkregen van het besturingssysteem en die zijn gebaseerd op de landinstellingen en de systeemvoorkeuren van de gebruiker. U kunt het gedrag van de methoden compare() en equals() aanpassen door expliciet bepaalde eigenschappen in te stellen. De volgende tabel geeft een overzicht van de eigenschappen en het effect ervan op vergelijkingen:

Collator-eigenschap

Effect

numericComparison

Bepaalt of digitale tekens worden behandeld als getallen of als tekst.

ignoreCase

Bepaalt of verschillen tussen hoofdletters en kleine letters worden genegeerd.

ignoreCharacterWidth

Bepaalt of vormen met volledige breedte of met halve breedte van sommige Chinese en Japanse tekens worden beschouwd als gelijkwaardig.

ignoreDiacritics

Bepaalt of tekenreeksen die dezelfde basistekens gebruiken maar verschillend zijn met betrekking tot accenten of andere diakritische tekens worden beschouwd als gelijkwaardig.

ignoreKanaType

Bepaalt of tekenreeksen die alleen verschillen in het type Kana-teken dat wordt gebruikt, worden beschouwd als gelijkwaardig.

ignoreSymbols

Bepaalt of symbolen, zoals spaties, valutasymbolen, wiskundige symbolen en andere symbolen worden genegeerd.

De volgende code laat zien dat het instellen van de eigenschap ignoreDiacritics op de waarde True, van invloed is op de sorteervolgorde van een lijst met Franse woorden:

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