自定义排序排序

本文关键字:排序 自定义 | 更新日期: 2023-09-27 17:49:26

是否有办法在。net/c#中根据自定义的字母顺序对List<string>进行排序?

我有一个单词列表:

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

,我希望按以下顺序排序:

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

通过自定义字母顺序,我的意思是我正在构建一种具有如下字母的语言:ABZTMIGJLNKSOŚPRFUHDVEÐÞY。在Java中找到的RuleBasedCollator的c#实现将是完美的!如果不存在这样的东西,那么编写自定义算法的一些指针将是值得赞赏的。

提前感谢。

自定义排序排序

我肯定会从创建RuleBasedCollator开始。找出你想要的规则是比较困难的任务之一。

有一个项目通过icu提供。net绑定,可能适合你。

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

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

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

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