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