2017-04-22 127 views
-1

我想通过列表中的元素在嵌套字典的数量进行排序字典值: VAR evantData =新词典>>()排序字典通过在列表elemnts的数目是用于嵌套字典

这是我的代码..

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)); 
     } 
    } 

我要排序的出来的元素在列表中的号码

+2

什么是quesiton?显示您的代码 – Sajeetharan

+0

排序字典?????没有这样的概念作为散列表/字典中的元素的顺序。我建议你熟悉存在的基本数据结构以及它们的常见操作,以及它们在什么情况下有用。 –

+0

好的,按列表中的元素数量排序

回答

-1
var yourDictionary = new Dictionary<string, Dictionary<string, List<string>>>(); 

yourDictionary = yourDictionary.OrderBy(x => x.Value.Sum(y => y.Value.Count())).ToDictionary(x => x.Key, x => x.Value); 

我还以为你想要的字典中一个新的命令。 只有你需要它时,最后一部分才是。

+1

如果您然后调用'ToDictionary',那么使用'OrderBy'有什么意义? '字典<,>'没有明确定义的顺序。 –

+0

我正在更好地回答,抱歉,1分钟。 – Akaize

+0

按键排序很简单,但由嵌套字典的价值..我不能得到它:) –

1

字典的排序本质上是错误的,它没有任何意义。现在

,如果你需要的是只在某个给定的顺序排列的价值观和你不需要相关的密钥,那么你可以简单地做:

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

如果您需要将KeyValuePair<,>使排序然后你可以这样做:

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

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

请注意,以上以上的选项都不会对您的字典进行整理。你不能那样做;他们只需按照指定的顺序对存储在字典中的项目创建新的枚举。