1

我试图按通用值对 Dictionary 对象进行排序。

这是我的代码

Dictionary<string, ReportModel> sortedDic = new Dictionary<string, ReportModel>();
Dictionary<string, ReportModel> rDic = new Dictionary<string, ReportModel>();
var ordered = sortedDic.OrderByDescending(x => x.Value.totalPurchase);
foreach (var item in ordered)
{                           
    rDic.Add(item.Key, item.Value);
}

变量ordered 与sortedDic 具有相同的顺序。这有什么问题?任何想法?

4

2 回答 2

4

发生这种情况是因为Dictionary通常是无序容器*。当您将数据放入rDic时,它再次变得无序。

要保留所需的顺序,您需要将结果放入一个明确保留您提供的顺序的容器中。例如,您可以使用 的列表KeyValuePair<string,ReportModel>,如下所示:

IList<KeyValuePair<string,ReportModel>> ordered = sortedDic
    .OrderByDescending(x => x.Value.totalPurchase)
    .ToList();


*由于Dictionary<K,V>Microsoft 实现的方式,它恰好保留了插入顺序,但这是偶然且未记录的,因此它可能会在将来的版本中更改,不应依赖。

于 2013-05-26T23:05:45.067 回答
0

将项目添加回字典时,它不会保持它们的顺序。您可以:

  1. 使用以下实现
  2. 使用下表中的列表。

    IEnumrable> lst=
       sortedDic.OrderByDescending(x => x.Value.totalPurchase).ToArray();
  3. [编辑] 如果您不介意更改密钥,则可以使用 SortedDictionary<,>。

于 2013-05-26T23:11:35.563 回答