我有一个列表:“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/