为什么 C# OrderBy 的字符串顺序是先小写再大写?
Why does C# OrderBy with string order lowercase before uppercase?
我正在用 C# 编写代码,遇到需要我订购一系列单字符串的情况。
示例:
var list = new List<string> { "1", "A", "a", "0" };
因为我们都知道 ASCII
table 在 Lower 之前列出了 Upper,所以我希望它是这样排序的 (0, 1, A, a),但它是这样排序的这个 (0, 1, a, A)
我有一个简单的例子:
var strs = new List<string> { "1", "A", "a", "0" };
var orderedStrs = strs.OrderBy(l => l);
Console.WriteLine("---strs---");
foreach(var elem in strs){
Console.WriteLine(elem);
}
Console.WriteLine("---orderedStrs---");
foreach(var elem in orderedStrs){
Console.WriteLine(elem);
}
var chars = new List<char> { '1', 'A', 'a', '0' };
var orderedChars = chars.OrderBy(ch => ch);
Console.WriteLine("---chars---");
foreach(var elem in chars){
Console.WriteLine(elem);
}
Console.WriteLine("---orderedChars---");
foreach(var elem in orderedChars){
Console.WriteLine(elem);
}
这是输出:
---strs---
1
A
a
0
--- orderedStrs---
0
1
a
A
---chars---
1
A
a
0
--- orderedChars---
0
1
A
a
有人能回答我这个问题吗?
您可以使用 OrderBy(a => a, StringComparer.Ordinal)
var strs = new List<string> { "1", "A", "a", "0" };
var orderedStrs = strs.OrderBy(l => l);
Console.WriteLine("---strs---");
foreach (var elem in strs.OrderBy(a => a, StringComparer.Ordinal))
{
Console.WriteLine(elem);
}
结果
---strs---
0
1
A
a
我正在用 C# 编写代码,遇到需要我订购一系列单字符串的情况。 示例:
var list = new List<string> { "1", "A", "a", "0" };
因为我们都知道 ASCII
table 在 Lower 之前列出了 Upper,所以我希望它是这样排序的 (0, 1, A, a),但它是这样排序的这个 (0, 1, a, A)
我有一个简单的例子:
var strs = new List<string> { "1", "A", "a", "0" };
var orderedStrs = strs.OrderBy(l => l);
Console.WriteLine("---strs---");
foreach(var elem in strs){
Console.WriteLine(elem);
}
Console.WriteLine("---orderedStrs---");
foreach(var elem in orderedStrs){
Console.WriteLine(elem);
}
var chars = new List<char> { '1', 'A', 'a', '0' };
var orderedChars = chars.OrderBy(ch => ch);
Console.WriteLine("---chars---");
foreach(var elem in chars){
Console.WriteLine(elem);
}
Console.WriteLine("---orderedChars---");
foreach(var elem in orderedChars){
Console.WriteLine(elem);
}
这是输出:
---strs---
1
A
a
0
--- orderedStrs---
0
1
a
A
---chars---
1
A
a
0
--- orderedChars---
0
1
A
a
有人能回答我这个问题吗?
您可以使用 OrderBy(a => a, StringComparer.Ordinal)
var strs = new List<string> { "1", "A", "a", "0" };
var orderedStrs = strs.OrderBy(l => l);
Console.WriteLine("---strs---");
foreach (var elem in strs.OrderBy(a => a, StringComparer.Ordinal))
{
Console.WriteLine(elem);
}
结果
---strs---
0
1
A
a