Ordinamento e confronto di stringhe

Flash Player 10.1 e versioni successive, Adobe AIR 2.0 e versioni successive

Per fascicolazione si intende il processo di disposizione delle cose nell'ordine corretto. Le regole di fascicolazione variano in maniera significativa in base alle impostazioni internazionali. Le regole cambiano anche se state ordinando un elenco o individuando la corrispondenza di elementi simili, ad esempio in un algoritmo di ricerca del testo.

Quando eseguite l'ordinamento, piccole differenze, ad esempio lettere maiuscole e minuscole o segni diacritici come gli accenti, sono spesso significative. Ad esempio, la lettera ö (o con una dieresi) è considerata per lo più equivalente alla normale lettera “o” in francese o in inglese. La stessa lettera, tuttavia, segue la lettera z in svedese. Inoltre, in francese e in altre lingue, la differenza dell'ultimo accento un una parola determina il suo ordine in un elenco ordinato.

Quando eseguite la ricerca, spesso preferite ignorare le differenze tra maiuscole e minuscole o nei segni diacritici, per aumentare la probabilità di individuare corrispondenze rilevanti. Ad esempio, una ricerca per i caratteri “cote” in un documento francese restituisce plausibilmente “cote”, “côte” e “coté”.

Uso della classe Collator

I metodi principali della classe Collator sono il metodo compare(), utilizzato principalmente per l'ordinamento, e il metodo equals(), utilizzato per la corrispondenza dei valori.

Nell'esempio seguente viene mostrato il diverso comportamento dei metodi compare() ed 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é 
}

Viene innanzitutto creato un oggetto Collator in modalità SORTING per le impostazioni internazionali fr-FR. Quindi vengono ordinate due parole che differiscono solo per segni diacritici. Questo mostra che il confronto SORTING distingue tra caratteri accentati e non accentati.

L'ordinamento viene eseguito passando un riferimento al metodo sort() dell'oggetto Collator come un parametro al metodo Array.sort(). Questa tecnica è uno dei modi di utilizzo dell'oggetto Collator più efficienti per il controllo dell'ordinamento.

Viene quindi creato un oggetto Collator in modalità MATCHING. Quando l'oggetto Collator confronta le due parole, queste vengono trattate come se fossero uguali. Questo esempio mostra che il confronto MATCHING stima come identici i caratteri accentati e non accentati.

Personalizzazione del comportamento della classe Collator

Per impostazione predefinita, la classe Collator utilizza regole di confronto delle stringhe ottenute dal sistema operativo in base alle impostazioni internazionali e alle preferenze di sistema dell'utente. Potete personalizzare il comportamento dei metodi compare() ed equals() impostando in maniera esplicita diverse proprietà. Nella tabella seguente vengono elencate le proprietà e il loro effetto una volta eseguito il confronto:

Proprietà Collator

Effetto

numericComparison

Controlla se i caratteri cifra vengono trattati come numeri o come testo.

ignoreCase

Controlla se le differenze tra maiuscole e minuscole vengono ignorate.

ignoreCharacterWidth

Controlla se i formati a larghezza intera e larghezza ridotta di alcuni caratteri cinesi e giapponesi sono valutati come identici.

ignoreDiacritics

Controlla se le stringhe che utilizzano gli stessi caratteri di base ma diversi accenti o altri segni diacritici sono valutati come uguali.

ignoreKanaType

Controlla se le stringhe che differiscono solo per il tipo di carattere kana utilizzato vengono trattate come uguali.

ignoreSymbols

Controlla se i caratteri simbolo come spazi, simboli di valuta, simboli matematici e altri vengono ignorati.

Il codice seguente mostra che l'impostazione della proprietà ignoreDiacritics su true modifica l'ordinamento di un elenco di parole francesi:

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