如何按字母顺序对SortedDictionary集合中的键进行排序

3

我有一个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

我有没有漏掉什么?


请查看我的编辑...虽然更加复杂,但在所有情况下都能按您的期望工作。 - metacubed
只是为了那些可能有同样问题的人。我找到了第二个替代方案,在我的情况下非常有效。http://www.codeproject.com/Articles/11016/Numeric-String-Sort-in-C - ck84vi
1个回答

3

注意:重新修订,因为之前的答案没有正确解决问题。

你要寻找的是所谓的“自然顺序”排序。这比早期的解决方案要复杂得多。简而言之,您必须将字符串键分成其数字和文本部分,然后按顺序对每个部分进行排序。如果该部分类似于数字,则像数字一样进行排序。否则,将其视为字符串进行排序。

请参见此博客文章Natural Sort Compare with Linq OrderBy以获取可能的实现。原始来源在此处


非常感谢,这正是我一直在寻找的。我原本以为它会是框架的一部分,但这个解决方案解决了我的问题。 - ck84vi
因为链接可能会失效,最好在答案正文中留下一个示例实现。这个答案就有它。 - alelom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接