You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:22:31