簡體   English   中英

為什么 C# OrderBy 在大寫之前使用小寫的字符串順序?

[英]Why does C# OrderBy with string order lowercase before uppercase?

我正在用 C# 編碼,我遇到了需要我訂購一系列一個字符串的情況。 例子:

var list = new List<string> { "1", "A", "a", "0" };

由於我們都知道ASCII表在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM