簡體   English   中英

如何按字母順序按鍵對SortedDictionary集合進行排序

[英]How to sort a SortedDictionary collection by key alphabetically

我有一個SortedDictionary的集合:

SortedDictionary<string, string> _variableValues = new SortedDictionary<string, string>();

鍵值對看起來像:

ThkPost_Point15  5
ThkPost_Point1   15
ThkPost_Point11  8
ThkPost_Point2   7
ThkPost_Point20  1
ThkPost_Point22  1

現在我想按字母順序對它們進行排序。

我嘗試通過使用來做到這一點

_variableValues.OrderBy(key => key.Key);

但我的問題是,結果是:

ThkPost_Point1   15
ThkPost_Point11  8
ThkPost_Point15  5
ThkPost_Point2   7
ThkPost_Point20  1
ThkPost_Point22  1

但我正在尋找的是一種實現排序結果的解決方案,如:

ThkPost_Point1   15
ThkPost_Point2   7
ThkPost_Point11  8
ThkPost_Point15  5
ThkPost_Point20  1
ThkPost_Point22  1

有沒有辦法使用SortedDictionary以這種方式對數據進行排序?

編輯:

我試圖實現Babu和metacubed的提示。

因此以下列方式使其受到阻礙

    static void Main(string[] args)
    {
        SortedDictionary<string, string> _varVal = new SortedDictionary<string, string>(StringComparer.OrdinalIgnoreCase);

        _varVal.Add("Variable1", "Value1");
        _varVal.Add("Variable2", "Value2");
        _varVal.Add("Variable3", "Value3");
        _varVal.Add("Variable4", "Value4");
        _varVal.Add("Variable5", "Value5");

        _varVal.Add("Variable10", "Value10");
        _varVal.Add("Variable11", "Value11");
        _varVal.Add("Variable12", "Value12");
        _varVal.Add("Variable13", "Value13");
        _varVal.Add("Variable14", "Value14");

        _varVal.Add("Variable20", "Value20");
        _varVal.Add("Variable22", "Value21");
        _varVal.Add("Variable23", "Value22");
        _varVal.Add("Variable24", "Value23");
        _varVal.Add("Variable25", "Value24");

        foreach (KeyValuePair<string, string> kvp in _varVal)
        {
            Console.WriteLine(kvp.Key,kvp.Value);
            Debug.WriteLine(kvp.Key +" "+ kvp.Value);
        }

        Application.Run();
    }

但結果仍然如下:

    Variable1 Value1
    Variable10 Value10
    Variable11 Value11
    Variable12 Value12
    Variable13 Value13
    Variable14 Value14
    Variable2 Value2
    Variable20 Value20
    Variable22 Value21
    Variable23 Value22
    Variable24 Value23
    Variable25 Value24
    Variable3 Value3
    Variable4 Value4
    Variable5 Value5

我錯過了什么嗎?

注意:修改,因為較早的答案沒有正確解決問題。

您正在尋找的是所謂的“自然順序”排序。 與早期的解決方案相比,這樣做要復雜得多。 簡而言之,您必須將字符串鍵拆分為其數字和文本部分,然后按順序對每個部分進行排序。 如果部件類似於數字,則將其排序為數字。 否則,將其排序為字符串。

有關可能的實現,請參閱此博客文章自然排序與Linq OrderBy比較 原始來源在這里

暫無
暫無

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

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