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

C#字符串排序:如何非Ordinal比较且同首字母小写后置?

字符串排序问题解答

不存在直接可用的StringComparison枚举参数,能一步得到你想要的Abc、abc、Bca、bca排序结果,原因如下:

  • 不带参数的string.Compare(a, b)使用当前线程的文化默认排序规则,会将小写字母优先排在对应大写字母前面,所以得到abc、Abc、bca、Bca的结果。
  • 传入StringComparison.Ordinal时,是按ASCII码值排序,所有大写字母的ASCII值小于小写字母,因此所有大写开头的字符串会整体排在小写开头的字符串前面,得到Abc、Bca、abc、bca的结果,不符合你要的「同字母组合的大写在前、小写在后」的分组需求。

要实现目标排序,你可以自定义比较逻辑,先按大小写不敏感的规则排序,当两个字符串忽略大小写后相等时,再按大小写敏感的规则让大写在前:

names.Sort((a, b) => {
    // 先忽略大小写比较
    int caseInsensitiveResult = string.Compare(a, b, StringComparison.OrdinalIgnoreCase);
    if (caseInsensitiveResult != 0)
        return caseInsensitiveResult;
    // 忽略大小写相等时,按Ordinal规则排序(大写ASCII值更小,会排在前面)
    return string.Compare(a, b, StringComparison.Ordinal);
});

这段代码会先把Abc和abc归为一组、Bca和bca归为一组,再在组内让大写开头的字符串排在前面,最终得到你要的Abc、abc、Bca、bca排序结果。

内容的提问来源于stack exchange,提问作者Zeldarulah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:24:56