排序和比較字串
Flash Player 10.1 以及更新的版本,Adobe AIR 2.0 以及更新的版本
定序是依正確順序排列項目的程序。定序規則會因地區設定而有明顯不同。如果您是排序清單或符合類似的項目 (例如在文字搜尋演算法中),則規則也會不同。
排序時,即使是些許的差異 (例如大寫和小寫字母或讀音符號 (如重音)) 通常也十分重要。例如,字母 ö (含分音符號的 o) 視為最符合法文或英文的一般字母 o。不過,在瑞典文中,相同的字母則接在字母 z 後面。而且,在法文和部分其他語言中,文字中的最後重音差異可決定它在排序清單中的順序。
您通常會想要在搜尋時忽略大小寫或讀音符號差異,以增加找到相關相符項目的機會。例如,在法文文件中搜尋「cote」字元,可能會傳回下列相符項目:「cote」、「côte」和「coté」。
使用 Collator 類別
Collator 類別的主要方法是 compare() 方法 (主要用於排序) 和 equals() 方法 (用於比對值)。
下列範例顯示 compare() 和 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é
}
這個範例會先針對「法文-法國」地區設定,建立 SORTING 模式的 Collator 物件。然後排序兩個字,這兩個字只有讀音符號不同。這表示 SORTING 比較可區分重音和非重音字元。
排序的執行,是將 Collator 物件之 sort() 方法的參照當成參數傳遞給 Array.sort() 方法。這種技術是使用 Collator 物件控制排序順序的一種最有效方法。
這個範例接著會建立 MATCHING 模式的 Collator 物件。該 Collator 物件比較這兩個字時,會將它們視為相等。這表示 MATCHING 比較將重音和非重音字元視為相同。
自訂 Collator 類別的行為
Collator 類別預設會根據地區設定和使用者的系統偏好設定,使用取自作業系統的字串比較規則。您可以明確設定各種屬性,來自訂 compare() 和 equals() 方法的行為。下表列出屬性以及它們在比較時的效果:
Collator 屬性
|
特效
|
numericComparison
|
控制將數字字元視為數字或文字。
|
ignoreCase
|
控制是否忽略大小寫差異。
|
ignoreCharacterWidth
|
控制是否將部分中文和日文字元的全形和半形格式視為相同。
|
ignoreDiacritics
|
控制是否將使用相同基礎字元但重音不同或讀音符號不同的字串視為相同。
|
ignoreKanaType
|
控制是否將只有假名字元類型不同的字串視為相同。
|
ignoreSymbols
|
控制是否忽略符號字元 (例如空格、貨幣符號、數學符號和其他項目)。
|
下列程式碼顯示將 ignoreDiacritics 屬性設為 true,會變更法文文字清單的排序順序:
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