簡體   English   中英

C# 使用下划線和連字符對字符串列表進行排序

[英]C# Sorting string list with underscore and hyphen

我有一個List<string> ,其值為SK-DisburSK_Recon 當我對列表進行排序時,output 應該是什么?

我正進入(狀態:

SK_偵察
SK-Disbur

我期待在 Recon 之前使用 Disbur,因為連字符出現在下划線之前。

這是我的代碼:

List<string> list=new List<string>();
list.Add("SK-Disbur");
list.Add("SK_Recon");
list.Sort();
for(int i=0;i <list.Count;i ++)
{
    Console.WriteLine(list[i]);
}

默認情況下 list.Sort() 使用當前區域性的排序規則。 這意味着每個字符都使用語言排序(字母順序)進行排序。 您應該使用序數排序,以便按每個字符的二進制值排序。 試試: list.Sort(StringComparer.Ordinal);

.NET 不使用 ASCII,它使用 Unicode UTF-16。 當您執行字符串排序時,默認情況下 .NET 使用當前區域性的排序規則。 在這種情況下,這些規則表明“_”在“-”之前。 您可以使用“序數”字符串比較器獲得您期望的結果:

    List<string> list = new List<string>()
    {
    "SK-Disbur",
    "SK_Recon",
    "SK1",
    "SK2"
    };

    list.Sort(StringComparer.Ordinal);

    for (int i = 0; i < list.Count; i++)
    {
        Console.WriteLine(list[i]);
    }

你會得到這個結果

SK-Disbur
SK1
SK2
SK_Recon

但是如果你使用 list.Sort() (默認情況下)結果會很不一樣

SK_Recon
SK-Disbur
SK1
SK2

暫無
暫無

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

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