我想按嵌套字典中List中元素的数量对字典进行排序: var evantData = new Dictionary>>()
这是我的代码..
var evantData = new Dictionary<string, Dictionary<string, List<string>>>
();
string input = "";
while ((input=Console.ReadLine())!="Time for Code")
{
string[] evantAndParticipants = input.Split().Select(x => x.Trim()).ToArray();
if (!evantData.ContainsKey(evantAndParticipants[0]))
{
evantData.Add(evantAndParticipants[0],new Dictionary<string, List<string>>());
evantData[evantAndParticipants[0]].Add(evantAndParticipants[1], new List<string>());
}
evantData[evantAndParticipants[0]][evantAndParticipants[1]].AddRange(evantAndParticipants.Skip(2));
}
foreach (var item in evantData)
{
foreach (var evant in item.Value)
{
Console.WriteLine(evant.Key+" - {0}",evant.Value.Count);
Console.WriteLine(string.Join("\r\n",evant.Value));
}
}
我想按列表中的元素数量排序
答案 0 :(得分:1)
对词典进行排序本质上是错误的,没有意义。
现在,如果您需要的只是以某个给定顺序排序的值,而您不需要关联的键,那么您可以简单地执行:
myDictionary.Values.OrderBy(v => v.Count);
如果您需要对构成字典的KeyValuePair<,>
进行排序,那么您可以这样做:
var sortedKeyValuePairs = myDictionary.OrderBy(kv => kv.Value.Count);
但是,这通常不是你想用字典做的。你要么使用错误的工具,要么试图以错误的方式做某事。你为什么需要这样做?
请注意,上面没有任何选项可以对您的词典进行排序。你做不到;它们只是创建新的枚举,其中存储在字典中的项目按指定的顺序排序。