2014-05-15 64 views
2

我有SortedDictionary集合:如何排序鍵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以這種方式對數據進行排序?

編輯:

我試圖執行巴布和metacubed的提示。

所以impelented它通過以下方式

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 

我錯過了什麼?

+0

看到我的編輯..更復雜,但會按照您的預期在所有情況下工作。 – metacubed

+0

只爲那些可能有同樣問題的人。我發現了另一種解決方案,在我的情況下,它就像一個魅力一樣。 http://www.codeproject.com/Articles/11016/Numeric-String-Sort-in-C – ck84vi

回答

2

注:修改是因爲較早的答案沒有正確解決問題。

你在找什麼叫做「自然順序」排序。與早期的解決方案相比,這樣做要正確得多。簡而言之,您必須將字符串鍵分爲數字和文本部分,然後按順序對每個部分進行排序。如果零件類似數字,則將其排序爲數字。否則,將其排序爲一個字符串。

看到這個博客文章Natural Sort Compare with Linq OrderBy爲可能的實現。原始來源是here

+0

非常感謝。這就是我正在尋找的。我認爲它將成爲框架的一部分。但是這個解決方案解決了我的問題。 – ck84vi