C#字符串排序结果不符合预期,问题出在哪里?
C# Array.Sort字符串排序不符合Unicode值预期的原因
你提到的问题核心在于Array.Sort(string[])默认使用当前系统文化的排序规则,而非严格基于Unicode码点值的比较。
虽然'2'的Unicode码点(50)确实小于'='的码点(61),但.NET默认的字符串排序会遵循当前文化的排序约定——很多文化中,符号类字符的排序位置会被调整到数字之后,这就导致了你看到的结果:=:hh、=:rr排在2:yy前面。
如果需要严格按照Unicode码点值进行排序,你需要显式指定StringComparer.Ordinal(或StringComparer.OrdinalIgnoreCase)作为排序比较器,修改后的代码如下:
string[] s = ["=:rr", "2:yy", "=:hh"]; Array.Sort(s, StringComparer.Ordinal); foreach (var item in s) { Console.WriteLine(item); }
运行这段代码后,输出就会符合你的预期:
2:yy =:hh =:rr
StringComparer.Ordinal会直接基于字符的Unicode码点值进行比较,完全忽略文化差异,这才是你预期的纯码点排序逻辑。
内容的提问来源于stack exchange,提问作者Silophon
相关产品推荐
相关产品推荐

