.NET / C#中是否有办法根据自定义字母顺序对List<string>
进行排序?
我有一个单词列表:
{ "badum", "śiram", "ðaur", "hor", "áltar", "aun" }
我希望按以下顺序排序:
{ "áltar", "aun", "badum", "śiram", "hor", "ðaur" }
按照自定义字母顺序,我的意思是我正在使用constructed language字母表,如下所示:ABZTMIGJLNKSOŚPRFUHDVEÐÞY。在Java中找到的RuleBasedCollator
的C#实现将是完美的!如果不存在这样的事情,那么可以理解编写自定义算法的一些指示。
提前谢谢。
答案 0 :(得分:3)
我肯定会从创建RuleBasedCollator开始。弄清楚你想要的规则是一项艰巨的任务。
有一个项目可以提供适合您的.net bindings over icu。
如果这不符合您的要求,并且您决定自己编写,Unicode Collation Algorithm是一个很好的资源。请记住,概念上的自然语言排序(尽管可能进行许多优化)涉及具有不断增加的特异性的单独传递。第一遍将寻找所谓的主要区别(通常忽略大小写和某些变音符号和标点符号的差异)如果没有差异并且两个字符串中的主要单位数相同,那么你可以进行第二次传递,这个考虑到变音差异的时间,如果有的话。接下来,您将处理案例区别,最后处理标点符号。
答案 1 :(得分:2)
您可以将自定义排序器传递给List.Sort()
方法:
List<string> foo = new List<string>();
foo.Sort((a, b) => a.CompareTo(b));
这将根据您要使用的标准对列表进行排序(上面显然只是常规的字符串比较)。