在芬兰,我们排序W后V(如英语),但因为W不是本地芬兰字母,它被认为是一个变体V,因为它是等于其排序V,但在情况下,两个词之间的唯一区别是,V是W,然后V首先对-version进行排序.一个例子说明了正确的顺序:
Vatanen, Watanen, Virtanen
Run Code Online (Sandbox Code Playgroud)
芬兰语V,W并作为A和整理Á.Á是排序的A,但如果它是唯一的差异,那么非重音的首先出现.同样的规则是针对所有其他重音字母,但是Å,Ä并且Ö在Z之后单独整理.
问题:以预定义方式对变体进行排序的最佳算法是什么?(例如,[Watanen, Vatanen, Virtanen]至[Vatanen, Watanen, Virtanen])?
补充:这个问题与http://cldr.unicode.org/index/cldr-spec/collation-guidelines中定义的其他变体的扩展有关,因为该技术很可能是同样,这个问题的答案有益于尽可能广泛的受众,排序算法可以与Unicode CLDR中定义的整理规则兼容.Unicode CLDR定义了字母之间的三个级别的差异:主要级别(基本字母),次级别(重音字母)和第三级别(字符大小写).
我已经考虑过某种类型的数组准备工作,我们可以用零填充所有数字,使它们可以作为字符串进行比较.一个例子:阵列[file1000.jpg, file3.jpg, file22.jpg]可以是准备用零这种方式,使其可比作为字符串通过填充:[file1000.jpg, file0003.jpg, file0022.jpg].由于数组的准备,我们可以使用原生Array.sort()快速排序.
目标语言是Javascript,它缺乏对基于排序规则的排序的支持,因此必须自定义排序功能.该算法是首选,但如果您还有代码,则值得+1.