LINQ OrderBy不能处理Dictionary Key

时间:2015-05-17 04:16:41

标签: c# linq

对我来说似乎没问题,但我的清单仍未按我的钥匙排序。

    var tagNamesAndRoutes = new Dictionary<string, string>();

    foreach (string name in tagNames)
    {
        tagNamesAndRoutes.Add(name, routeConstant);
    }

字典值示例:

Key       Value
"NUnit"     "/Category"
"WCF"       "/Category"
"ReSharper" "/Category"

等等。

我尝试通过典型的LINQ对其进行排序:

tagNamesAndRoutes.OrderBy(c => c.Key);

但事后并没有排序。

2 个答案:

答案 0 :(得分:4)

OrderBy实际上会返回有序的集合。试试这个:

var orderedTagNamesAndRoutes = tagNamesAndRoutes.OrderBy(c => c.Key);

然后使用orderedTagNamesAndRoutes

如果您希望自己对字典进行排序,可以使用SortedDictionary。 尝试:

var tagNamesAndRoutes = new SortedDictionary<string, string>();

在这种情况下,您无需致电OrderBy。字典总是按键排序。

答案 1 :(得分:3)

OrderBy 会返回 IOrderedEnumerable ,您可以按排序顺序进行迭代,但不会修改实际字典。

所以你需要做一些像

这样的事情
var sorted = tagNamesAndRoutes.OrderBy(c => c.Key);
foreach (string name in sorted) {
    ...
}

字典类型本身没有关键字的顺序概念。如果您总是希望对键进行排序,则可以使用SortedDictionary。

https://msdn.microsoft.com/en-us/library/vstudio/bb534966%28v=vs.100%29.aspx