排序的特异性
本文关键字:特异性 排序 | 更新日期: 2023-09-27 18:08:20
字符'-'
的编码为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));
-
——
但是为什么下面的排序结果是错误的呢?
var a2 = new string[] { "ab", "-b" };
Console.WriteLine(string.Join(" ", a2));
Array.Sort(a2);
Console.WriteLine(string.Join(" ", a2));
ab - b
ab - b
忽略-
,
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
排序和序数排序。单词排序执行文化敏感的操作字符串比较。某些非字母数字字符可能具有赋予它们特殊的权重。例如,连字符("-")可能给它一个很小的权重,这样"coop"answers"co-op"在排序列表中彼此相邻出现。字符串排序类似于单词排序,除了没有特殊情况。因此,所有非字母数字符号出现在所有字母数字字符之前。序数排序基于每个字符串的Unicode值来比较字符串