我试图按值通用的方式对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相同的顺序。 这有什么问题? 有什么想法吗?
答案 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)
将项目添加回字典时,它不会保留其顺序。 你可以:
使用下表中的列表。
IEnumrable> lst= sortedDic.OrderByDescending(x => x.Value.totalPurchase).ToArray();
[编辑]如果您不介意更改密钥,则可以使用SortedDictionary&lt;,&gt;。