使用FP10.1新特性进行全面高效的中文排序
AS3, 算法相关 | 2010年07月11日 上午 9:32 | RSS 2.0在FlashPlayer10.1出现之前,AS3的中文排序只能靠很死板,很不完善的方式实现。
现在问题终于得到了改善,我们可以很方便的对中文进行排序了:-)
首先来看看要测试的代码:
var words:Array=["囧","杜","寤","頔","腭"];//jiong,du,wu,di,e
我们使用传统排序方式对其进行排序:
words.sort(); trace(words);//囧,寤,杜,腭,頔 = jiong,wu,du,e,di
输出的排序有明显问题。
现在让FlashPlayer10.1新增的flash.globalization 包来帮我们解决问题吧。
import flash.globalization.Collator;
var conll:Collator=new Collator("zh-Hant@collation=pinyin");
words.sort(conll.compare);
trace(words);//頔,杜,腭,囧,寤 = di,du,e,jiong,wu
这下排序就正确了:-)Windows/Mac上测试均有效。
说说原理:
flash.globalization.Collator是用于根据区域设置来比较字符串的类,我们构造了一个Collator类实例,传递了一个区域设置ID字符串(中文&拼音),然后将该实例的compare方法作为words排序的比较函数,自然就可以使用中文拼音的比较方式来进行排序了。
同理,如果希望依照用户本机的区域设置进行字符串比较,可以这样构造Collator实例:
import flash.globalization.Collator; import flash.globalization.LocaleID; var conll:Collator=new Collator(LocaleID.DEFAULT);
本文只是简单介绍了一下FlashPlayer10.1中区域设置API的应用,更多内容请参见
这个以前完全不知道啊…
楼主真牛叉
问一下,conll.compare参数,对于sortOn排序有用吗?我构造了一些用于中英问混合,根据字段进行排序,发现好像出错了。
有用!