排序和比较字符串

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

控制使用的仅 kana 字符类型不同的字符串是否视为等同。

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