2014-05-15 61 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