Dizeleri sıralama ve harmanlama

Flash Player 10.1 ve üstü, Adobe AIR 2.0 ve üstü

Harmanlama, nesneleri doğru sıraya dizme işlemidir. Harmanlama kuralları yerel ayarlara göre önemli ölçüde farklılık gösterir. Kurallar ayrıca bir listeyi sıralıyorsanız veya bir metin arama algoritmasındaki gibi benzer öğeleri eşleştiriyorsanız farklılık gösterir.

Sıralama yaparken, büyük ve küçük harfler veya aksan gibi harfçikler vb. küçük farklılıklar çoğunlukla önemlidir. Örneğin, ö harfi (üzerinde iki nokta olan o) genellikle Fransızca veya İngilizce'deki düz o harfi ile eş değerde görülür. Ancak, aynı harf İsveççe'de z harfini takip eder. Ayrıca, Fransızca’da ve diğer dillerin bazılarında, bir kelimedeki son aksan farkı bu kelimenin sıralı bir listedeki yerini belirler.

Arama yaparken, ilgili eşleşme bulma şansını arttırmak için çoğu zaman büyük/küçük harf veya aksan farklarını göz ardı etmek istersiniz. Örneğin, Fransızca bir belgede “cote” karakterleriyle yapılacak bir arama, büyük ihtimalle “cote”, “côte” ve “coté” eşleşmelerini verir.

Collator sınıfını kullanma

Collator sınıfının başlıca yöntemleri ağırlıklı olarak sıralama için kullanılan compare() yöntemi ve eşleşen değerler için kullanılan equals() yöntemidir.

Aşağıdaki örnekte compare() ve equals() yöntemlerinin farklı davranışları gösterilmektedir.

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

Aynı örnekte ilk olarak Fransız-Fransa yerel ayarları için SIRALAMA modunda bir Collator nesnesi oluşturulur. Ardından, yalnızca aksan işaretleri farklı olan iki kelime sıralanır. Buradan SIRALAMA harmanlamasının aksanlı ve aksansız karakterleri birbirinden ayırdığı görülmektedir.

Sıralama, bir referansı Array.sort() yönteminin parametresi olarak Collator nesnesinin sort() yöntemine geçirerek gerçekleştirilir. Sıralama sırasını kontrol etmek için Collator nesnesini kullanmanın en etkili yollarından biri bu tekniktir.

Örnek bundan sonra EŞLEŞTİRME modunda bir Collator nesnesi oluşturur. Collator nesnesi iki kelimeyi karşılaştırdığında, bunlara eşitmiş gibi davranır. Bu da EŞLEŞTİRME harmanlamasının aksanlı ve aksansız karakterlere aynı değeri verdiğini göstermektedir.

Collator sınıfının davranışını özelleştirme

Collator sınıfı varsayılan olarak yerel ayara ve kullanıcının sistem tercihlerine göre işletim sisteminden elde edilen dize harmanlama kurallarını kullanır. Çeşitli özellikleri açıkça ayarlayarak compare() ve equals() yöntemlerinin davranışını özelleştirebilirsiniz. Aşağıdaki tabloda özellikler ve bu özelliklerin harmanlamalar üzerindeki etkisi listelenmektedir:

Collator Özelliği

Efekt

numericComparison

Sayı karakterlerine sayı veya metin olarak işlem yapılmasını kontrol eder.

ignoreCase

Büyük harf ve küçük harf farklılıklarının göz ardı edilip edilmediğini denetler.

ignoreCharacterWidth

Bazı Çince ve Japonca karakterlerin tam-geniş ve yarı-geniş hallerinin eşit olarak değerlendirilip değerlendirilmeyeceğini kontrol eder.

ignoreDiacritics

Aynı taban karakterleri kullanıp farklı aksanları veya aksan işaretleri bulunan dizelerin eşit olarak değerlendirilip değerlendirilmeyeceğini kontrol eder.

ignoreKanaType

Yalnızca kullanılmakta olan kana karakter tipi farklı olan dizelerin eşit olarak değerlendirilip değerlendirilmeyeceğini kontrol eder.

ignoreSymbols

Boşluk, para birimi sembolü, matematik sembolü ve başka sembol karakterlerinin göz ardı edilip edilmeyeceğini kontrol eder.

Aşağıdaki kod, ignoreDiacritics özelliğini true olarak ayarlamanın Fransızca kelimeler listesindeki sırayı değiştireceğini göstermektedir:

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