按列表中的元素数量对字典进行排序,这是嵌套字典

时间:2017-04-22 16:39:30

标签: c# dictionary

我想按嵌套字典中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));
        }
    }

我想按列表中的元素数量排序

1 个答案:

答案 0 :(得分:1)

对词典进行排序本质上是错误的,没有意义。

现在,如果您需要的只是以某个给定顺序排序的值,而您不需要关联的键,那么您可以简单地执行:

 myDictionary.Values.OrderBy(v => v.Count);

如果您需要对构成字典的KeyValuePair<,>进行排序,那么您可以这样做:

var sortedKeyValuePairs = myDictionary.OrderBy(kv => kv.Value.Count);

但是,这通常不是你想用字典做的。你要么使用错误的工具,要么试图以错误的方式做某事。你为什么需要这样做?

请注意,上面没有任何选项可以对您的词典进行排序。你做不到;它们只是创建新的枚举,其中存储在字典中的项目按指定的顺序排序。