关于c#:如何对Dictionary进行排序< string,List< int>>

How to sort a Dictionary<string, List<int>> by a certain element in values list?

我在词典which lists as as keys和持有的字符串值。想象你是哪里有奥运the Keys and the values in different countries are for example number of each list number of体育参与者,medals,金,银medals等等。如果想知道备用金medals sort the countries is the second说黄金medals进入每个列表会想这样的东西:P></

1
2
3
4
var countryRankings = new Dictionary<string, List<int>>();
countryRankings.Add(country, new List<int>() {numberOfParticipants, numberOfWins });
//some more country data follows
countryRankings.OrderByDescending(pairs => pairs.Value[1]);

位is not the last but is not by rejected VisualStudio为预期的工作。the dictionary is not类。我认为这是更好的建立。乡村级与不同的属性,然后与在路上的OrderBy sort(λc=>c.goldmedals)but is there to do this with套式的方式在词典列表里面?P></


这是因为OrderByDescending扩展方法不会改变(修改)原始对象(countryRankings而是返回另一个对象,当枚举时,该对象会生成对原始字典中元素的有序引用。

因此,这应该是有效的:

1
2
3
4
5
6
var orderedRankings = countryRankings.OrderByDescending(pairs => pairs.Value[1]);
// now you can iterate over orderedRankings
foreach(var rankingPair in orderedRankings)
{
    // do something with it..
}

是的,按照你在问题的最后一部分中的建议创建一个类会更好,但这不会改变答案。


OrderByDescending方法不对字典排序,它返回一个已排序的新集合。

将结果赋给变量。但它不能是字典,因为字典中的项目无法重新排序。您可以使用ToList方法将结果作为实际集合来实现:

1
2
List<KeyValuePair<string, List<int>>> result =
  countryRankings.OrderByDescending(pairs => pairs.Value[1]).ToList();

使用类而不是整数列表会更好,但它不会改变获得排序结果所需的操作,只会改变表达式的排序方式。