c# - List<string> C# 自定义排序。数字后加下划线

标签 c# sorting stringcomparer

我有一个列表:“a_a”、“a1a”、“aaa”。

我需要按以下方式对其进行排序:“a1a”,“a_a”,“aaa”。

换句话说,我需要“_”符号出现在数字之后、字母之前。

我知道可以使用自定义比较器,但我还没有找到解决此问题的任何好的解决方案,只有肮脏的黑客,例如:

Compare(string x, string y){

return Comparer.Default.Compare(x.Replace("_", "9z"), y.Replace("_", "9z"));

}

最佳答案

根据标准ASCII表:

  '0'..'9' have codes 0x30..0x39
  '_'      -/-        0x5F
  'a'..'z' -/-        0x61..0x7A

因此,由于代码顺序正确,您可以使用序数比较:

  List<String> list = new List<string> {
    "a1a", "a_a", "aaa"
  };

  list.Sort((Comparison<String>) (
    (String left, String right) => {
       return String.CompareOrdinal(left, right);
    }
  ));

  ...
  // a1a, a_a, aaa
  Console.Write(String.Join(", ", list)); 

关于c# - List<string> C# 自定义排序。数字后加下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315451/

相关文章:

c# - 字符串与C#中的特殊字符比较

c# - 如何在 IHttpModule 中测试 HttpApplication 事件

c# - 如何从 C# 中的 Azure HTTP 触发器函数删除 CosmosDB 中的项目

Javascript/jQuery 组和排序组

java - 什么函数可以用来对 vector 进行排序?

r - 如何对已排序组内的组进行排序?

C#SortedList <string,TValue> .ContainsKey成功添加键返回false

c# - 将 dateTimePicker 插入 MySql phpmyadmin 数据库

c# - Web 服务中的多个早期绑定(bind)文件

c# - 什么.NET StringComparer 相当于 SQL 的 Latin1_General_CI_AS