Ordenación es el proceso de organizar cosas para que estén en un orden adecuado. Las reglas de ordenación varían sustancialmente según la configuración regional. Las reglas también son distintas si ordena una lista o compara elementos similares, como en un algoritmo de búsqueda de texto.
Durante la ordenación, las pequeñas diferencias como letras en mayúsculas y en minúsculas o los signos diacríticos como los acentos, suelen tener mucha importancia. Por ejemplo, la letra ö (o con diéresis) se considera equivalente a la letra o en francés o en inglés. La misma letra, sin embargo, corresponde a la letra z en sueco. Asimismo, en francés y en otros idiomas, un acento en una palabra determina su orden en una lista.
Al hacer búsquedas, normalmente se omiten las diferencias entre mayúscula y minúscula o los signos diacríticos para aumentar la posibilidad de encontrar coincidencias relevantes. Por ejemplo, una búsqueda de los caracteres “cote” en un documento en francés probablemente devolverá coincidencias para “cote”, “côte” y “coté”.
Uso de la clase Collator
Los métodos principales de la clase Collator son el método compare(), empleado principalmente para ordenar, y el método equals(), utilizado para coincidencia de valores.
El siguiente ejemplo muestra el distinto comportamiento de los métodos compare() y 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é
}
El ejemplo primer crea un objeto Collator en modo SORTING para la configuración regional de francés de Francia. Seguidamente, ordena dos palabras que se distinguen únicamente en signos diacríticos. Esto muestra que la comparación SORTING distingue entre caracteres con y sin acentos.
La ordenación se realiza pasando una referencia al método sort() del objeto Collator como un parámetro al método Array.sort(). Esta técnica es una de las formas más eficaces de utilizar un objeto Collator para controlar la ordenación.
Seguidamente, el ejemplo crea un objeto en modo MATCHING. Cuando dicho objeto Collator compara las palabras, las trata como iguales. Esto muestra que los valores de comparación MATCHING son los mismos en caracteres con y sin acento.
Personalización del comportamiento de la clase Collator
De forma predeterminada, la clase Collator utiliza reglas de comparación de cadenas del sistema operativo a partir de la configuración regional y las preferencias del sistema del usuario. Es posible personalizar el comportamiento de los métodos compare() y equals() estableciendo de forma explícita diversas propiedades. La siguiente tabla contiene las propiedades y el efecto que tienen en las comparaciones:
Propiedad Collator
|
Efecto
|
numericComparison
|
Controla si los caracteres de dígitos se tratan como números o como texto.
|
ignoreCase
|
Controla si se tienen en cuenta las diferencias entre mayúsculas y minúsculas.
|
ignoreCharacterWidth
|
Controla si se consideran iguales formas de ancho completo y de ancho medio en determinados caracteres chinos y japoneses.
|
ignoreDiacritics
|
Controla si las cadenas que utilizan los mismos caracteres básicos pero distintos acentos o signos diacríticos se consideran iguales.
|
ignoreKanaType
|
Controla si las cadenas que se diferencian solo por el tipo de carácter kana utilizado se consideran iguales.
|
ignoreSymbols
|
Controla si los caracteres de símbolos, como los espacios, símbolos de divisa, símbolos matemáticos, etc., se omiten.
|
El siguiente código muestra que establecer la propiedad ignoreDiacritics en true, cambia el orden de una lista de palabras en francés:
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
|
|
|