Beim Sortieren werden Elemente in ihre richtige Reihenfolge gebracht. Bei Sortierregeln bestehen zwischen verschiedenen Gebietsschemas große Unterschiede. Die Regeln unterscheiden sich auch für verschiedene Aufgaben, beispielsweise für das Sortieren einer Liste und für das Zuordnen von ähnlichen Elementen, wie bei einem Algorithmus für die Textsuche.
Beim Sortieren sind oft auch kleine Unterschiede von Bedeutung, wie Groß- und Kleinbuchstaben oder diakritische Zeichen wie Akzente oder Umlaute. So wird der Umlaut ö im Deutschen wie der Buchstabe o behandelt. Im Schwedischen steht er dagegen in der Sortierreihenfolge nach dem Buchstaben z. In Französisch und einigen anderen Sprachen bestimmt der letzte Akzentunterschied in einem Wort die Sortierreihenfolge.
Beim Suchen empfiehlt es sich oft, Unterschiede bei der Groß- und Kleinschreibung oder diakritische Zeichen zu ignorieren, um die Wahrscheinlichkeit zu erhöhen, dass Übereinstimmungen gefunden werden. Wenn Sie beispielsweise in einem französischen Dokument nach den Zeichen „cote“ suchen, werden möglicherweise zusätzlich zu „cote“ auch Übereinstimmungen mit „côte“ und „coté“ zurückgegeben.
Verwenden der Collator-Klasse
Die Hauptmethoden der Collator-Klasse sind die compare()-Methode, die hauptsächlich zum Sortieren verwendet wird, und die equals()-Methode zum Zuordnen von Werten.
Das folgende Beispiel zeigt das unterschiedliche Verhalten der compare()- und equals()-Methoden.
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é
}
Das Beispiel erstellt zunächst ein Collator-Objekt im SORTING-Modus für das Gebietsschema „Französisch-Frankreich“. Dann werden zwei Wörter sortiert, die sich nur hinsichtlich der diakritischen Zeichen unterscheiden. Dies zeigt, dass beim SORTING-Vergleich zwischen Buchstaben mit und ohne Akzentzeichen unterschieden wird.
Der Sortiervorgang erfolgt, indem ein Verweis auf die sort()-Methode des Collator-Objekts als Parameter an die Array.sort()-Methode übergeben wird. Dies ist eine der effizientesten Techniken, um die Sortierreihenfolge mit einem Collator-Objekt zu steuern.
Dann erstellt das Beispiel ein Collator-Objekt im MATCHING-Modus. Wenn das Collator-Objekt die beiden Wörter vergleicht, werden sie als gleich interpretiert. Dies zeigt, dass Zeichen mit Akzent beim MATCHING-Vergleich genauso behandelt werden wie Zeichen ohne Akzent.
Anpassen des Verhaltens der Collator-Klasse
Standardmäßig verwendet die Collator-Klasse Stringvergleichsregeln des Betriebssystems, die sich nach dem Gebietsschema und den Systemvoreinstellungen des Benutzers richten. Sie können das Verhalten der compare()- und equals()-Methoden anpassen, indem Sie explizit verschiedene Eigenschaften festlegen. In der folgenden Tabelle werden die Eigenschaften und ihre Auswirkungen auf Vergleiche aufgelistet:
Collator-Eigenschaft
|
Effekt
|
numericComparison
|
Steuert, ob Ziffern als Zahlen oder als Text behandelt werden.
|
ignoreCase
|
Steuert, ob Unterschiede zwischen Groß- und Kleinschreibung ignoriert werden.
|
ignoreCharacterWidth
|
Steuert, ob die Formen in halber oder voller Breite einiger chinesischer und japanischer Zeichen als gleich interpretiert werden.
|
ignoreDiacritics
|
Steuert, ob Strings, die sich nur hinsichtlich Akzentzeichen oder anderer diakritischer Zeichen unterscheiden, als gleich interpretiert werden.
|
ignoreKanaType
|
Steuert, ob Strings, die sich nur hinsichtlich des Typs des verwendeten Kana-Zeichens unterscheiden, als gleich interpretiert werden.
|
ignoreSymbols
|
Steuert, ob Symbolzeichen wie beispielsweise Leerzeichen, Währungssymbole und mathematische Symbole ignoriert werden.
|
Das folgende Codebeispiel zeigt, dass die Sortierreihenfolge in einer Liste mit französischen Wörtern sich ändert, wenn die ignoreDiacritics-Eigenschaft auf „true“ gesetzt wird:
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
|
|
|