字符的'-'代码是45,字符的代码'a'是97.很明显'-' < 'a'是真的.
Console.WriteLine((int)'-' + " " + (int)'a');
Console.WriteLine('-' < 'a');
Run Code Online (Sandbox Code Playgroud)
45 97
真
因此,以下排序的结果是正确的
var a1 = new string[] { "a", "-" };
Console.WriteLine(string.Join(" ", a1));
Array.Sort(a1);
Console.WriteLine(string.Join(" ", a1));
Run Code Online (Sandbox Code Playgroud)
a -
- a
但为什么以下类型的结果是错误的?
var a2 = new string[] { "ab", "-b" };
Console.WriteLine(string.Join(" ", a2));
Array.Sort(a2);
Console.WriteLine(string.Join(" ", a2));
Run Code Online (Sandbox Code Playgroud)
ab -b
ab -b
该-被忽略,
so - = "" < a
and -b = "b" > "ab"
Run Code Online (Sandbox Code Playgroud)
这是因为文化排序(默认)
https://msdn.microsoft.com/en-us/library/system.globalization.compareoptions(v=vs.110).aspx
Run Code Online (Sandbox Code Playgroud)The .NET Framework uses three distinct ways of sorting: word sort, string排序和序数排序.单词排序执行文化敏感的字符串比较.某些非字母数字字符可能会分配特殊权重.例如,连字符(" - ")可能具有非常小的权重,因此"coop"和"co-op"在排序列表中彼此相邻.字符串排序类似于单词排序,除了没有特殊情况.因此,所有非字母数字符号都在所有字母数字字符之前.序数排序根据字符串的每个元素的Unicode值比较字符串.
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |