【问题标题】:Custom Collation Ordering自定义排序规则
【发布时间】:2011-07-31 16:14:35
【问题描述】:

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

我有一个单词列表:

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

我希望按以下顺序排序:

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

按自定义字母顺序,我的意思是我正在处理constructed language,其字母如下所示:ABZTMIGJLNKSOŚPRFUHDVEСÞY。在 Java 中找到的 RuleBasedCollator 的 C# 实现将是完美的!如果不存在这样的东西,将不胜感激有关编写自定义算法的一些指示。

提前谢谢你。

【问题讨论】:

  • 我认为写一个自定义的StringComparer 是你最好的选择。

标签: c# collation


【解决方案1】:

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

有一个项目提供.net bindings over icu 可能适合你。

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

【讨论】:

  • 谢谢。您发布的链接非常有用!
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-01-17
    • 2011-12-29
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多