自定义整理排序

时间:2011-04-07 12:48:00

标签: c# collation

.NET / C#中是否有办法根据自定义字母顺序对List<string>进行排序?

我有一个单词列表:

{ "badum", "śiram", "ðaur", "hor", "áltar", "aun" }

我希望按以下顺序排序:

{ "áltar", "aun", "badum", "śiram", "hor", "ðaur" }

按照自定义字母顺序,我的意思是我正在使用constructed language字母表,如下所示:ABZTMIGJLNKSOŚPRFUHDVEÐÞY。在Java中找到的RuleBasedCollator的C#实现将是完美的!如果不存在这样的事情,那么可以理解编写自定义算法的一些指示。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

我肯定会从创建RuleBasedCollat​​or开始。弄清楚你想要的规则是一项艰巨的任务。

有一个项目可以提供适合您的.net bindings over icu

如果这不符合您的要求,并且您决定自己编写,Unicode Collation Algorithm是一个很好的资源。请记住,概念上的自然语言排序(尽管可能进行许多优化)涉及具有不断增加的特异性的单独传递。第一遍将寻找所谓的主要区别(通常忽略大小写和某些变音符号和标点符号的差异)如果没有差异并且两个字符串中的主要单位数相同,那么你可以进行第二次传递,这个考虑到变音差异的时间,如果有的话。接下来,您将处理案例区别,最后处理标点符号。

答案 1 :(得分:2)

您可以将自定义排序器传递给List.Sort()方法:

List<string> foo = new List<string>();
foo.Sort((a, b) => a.CompareTo(b));

这将根据您要使用的标准对列表进行排序(上面显然只是常规的字符串比较)。