字符'-'
的代码为45,字符'a'
的代码为97.很明显'-' < 'a'
为真。
Console.WriteLine((int)'-' + " " + (int)'a');
Console.WriteLine('-' < 'a');
45 97
真
因此,以下排序的结果是正确的
var a1 = new string[] { "a", "-" };
Console.WriteLine(string.Join(" ", a1));
Array.Sort(a1);
Console.WriteLine(string.Join(" ", a1));
a -
- 一个
但为什么以下排序的结果是错误的?
var a2 = new string[] { "ab", "-b" };
Console.WriteLine(string.Join(" ", a2));
Array.Sort(a2);
Console.WriteLine(string.Join(" ", a2));
ab -b
ab -b
答案 0 :(得分:5)
忽略-
,
so - = "" < a
and -b = "b" > "ab"
这是因为文化排序(默认)
https://msdn.microsoft.com/en-us/library/system.globalization.compareoptions(v=vs.110).aspx
The .NET Framework uses three distinct ways of sorting: word sort, string
排序和序数排序。单词排序执行文化敏感 字符串的比较。某些非字母数字字符可能有 分配给他们的特殊权重。例如,连字符(&#34; - &#34;)可能 有一个非常小的重量分配给它,以便&#34; coop&#34;和&#34;合作社&#34; 在排序列表中彼此相邻。字符串排序类似于 单词排序,除了没有特殊情况。所以,一切 非字母数字符号位于所有字母数字字符之前。 序数排序根据每个字符串的Unicode值比较字符串 字符串的元素。