排序的特异性

本文关键字:特异性 排序 | 更新日期: 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值来比较字符串