提问人:Zeldarulah 提问时间:10/5/2023 更新时间:10/6/2023 访问量:64
C# 字符串排序...如何比较非序数,但对于以相同字母开头的字符串,在大写后加上小写?
C# String sorting... how to compare non-Ordinal but put lowercase after uppercase for strings starting with same letter?
问:
假设我有四个字符串 abc、Abc、Bca 和 bca。要求是这些将排序(按字母顺序排列时)为 Abc、abc、Bca、bca。
使用此代码:
names.Sort((a, b) => string.Compare(a, b));
它按 abc、Abc、bca、bca 排序。如果我添加 StringComparison.Ordinal 参数,则它排序为 Abc、Bca、abc、bca。我可以传递任何参数来使其返回 Abc、abc、Bca、bca 而无需额外排序一次?
谢谢
答:
3赞
Charlieface
10/6/2023
#1
您可以使用自定义比较器,该比较器首先对不区分大小写的排序,然后仅当字符串相同时才对大小写进行排序。
names.Sort((a, b) => {
var compare = string.Compare(a, b, StringComparison.OrdinalIgnoreCase);
if (compare != 0)
return compare;
compare = string.Compare(a, b, StringComparison.Ordinal);
return compare;
});
评论
InvariantCulture
OrdinalIgnoreCase
Ordinal