Tri et comparaison des chaînes

Flash Player 10.1 et les versions ultérieures, Adobe AIR 2.0 et les versions ultérieures

Le processus de disposition des éléments dans l’ordre approprié porte le nom de classement. Les règles de classement varient considérablement selon les paramètres régionaux sélectionnés. Elles varient également si vous triez une liste ou que vous mettez en correspondance des éléments similaires (dans un algorithme de recherche de texte, par exemple).

Lors de l’exécution d’un tri, les différences mineures telles que la casse ou les signes diacritiques tels que les accents jouent souvent un rôle important. Ainsi, la lettre ö (o avec un tréma) est généralement considérée comme étant équivalente à la lettre o simple en français ou en anglais. En suédois, cette lettre suit cependant la lettre z. En français comme dans d’autres langues, la présence d’un caractère accentué dans un mot affecte l’ordre de tri d’une liste.

Lors d’une recherche, il est souvent préférable de ne pas tenir compte de la casse ou des signes diacritiques pour augmenter les chances de détection de correspondances appropriées. Ainsi, la recherche des caractères « cote » dans un document français est susceptible de renvoyer « cote », « côte » et « coté ».

Utilisation de la classe Collator

La classe Collator a pour principales méthodes compare(), qui sert principalement à trier, et equals(), qui permet de mettre en correspondance les valeurs.

L’exemple suivant illustre le comportement des méthodes compare() et 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é 
}

L’exemple commence par créer un objet Collator en mode SORTING pour les paramètres régionaux français-France. Il trie ensuite deux mots dont l’unique différence réside dans la présence de signes diacritiques. Il indique que le mode de comparaison SORTING établit une distinction entre les caractères accentués et non accentués.

Le tri repose sur la transmission d’une référence à la méthode sort() de l’objet Collator en tant que paramètre de la méthode Array.sort(). Ce type d’utilisation d’un objet Collator pour gérer l’ordre de tri est particulièrement efficace.

L’exemple crée ensuite un objet Collator en mode MATCHING. Lorsque l’objet Collator compare les deux mots, il les considère comme égaux. La comparaison MATCHING n’établit ainsi pas de distinction entre les caractères accentués et non accentués.

Personnalisation du comportement de la classe Collator

Par défaut, la classe Collator fait appel aux règles de comparaison de chaînes extraites du système d’exploitation, en fonction des paramètres régionaux et des préférences système de l’utilisateur. Pour personnaliser le comportement des méthodes compare() et equals(), définissez explicitement diverses propriétés. Le tableau suivant recense les propriétés et leur impact sur les comparaisons :

Propriété Collator

Impact

numericComparison

Détermine si les caractères numériques sont traités comme des nombres ou du texte.

ignoreCase

Détermine si les différences de casse sont ignorées.

ignoreCharacterWidth

Détermine si les formes à pleine chasse et à demi-chasse de certains caractères chinois et japonais sont considérées comme égales.

ignoreDiacritics

Détermine si les chaînes qui contiennent les mêmes caractères de base, mais des accents ou autres signes diacritiques différents sont considérées comme égales.

ignoreKanaType

Détermine si les chaînes dont l’unique différence réside dans le type de caractère kana utilisé sont considérées comme égales.

ignoreSymbols

Détermine si les symboles tels que les espaces, les symboles de devise, les symboles mathématiques et autres sont pris en compte.

Le code suivant indique que définir la propriété ignoreDiacritics sur true modifie l’ordre de tri d’une liste de mots français :

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