按通用值排序字典

时间:2013-05-26 22:58:33

标签: c# dictionary

我试图按值通用的方式对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);
}

变量order,只是具有与sortedDic相同的顺序。 这有什么问题? 有什么想法吗?

2 个答案:

答案 0 :(得分:4)

这是因为Dictionary通常是无序容器 * 。当您将数据放入rDic时,它会再次失序。

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

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

<小时/> * 由于Microsoft it happens to retain the insertion order实现Dictionary<K,V>的方式,但这是偶然的和未记录的,所以它可能在将来的版本中发生变化,不应该被依赖时。

答案 1 :(得分:0)

将项目添加回字典时,它不会保留其顺序。 你可以:

  1. 使用following implementation
  2. 使用下表中的列表。

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