2017-04-22 317 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); 

但是,這通常不是你想要用字典來做的。您要麼使用錯誤的工具,要麼嘗試以錯誤的方式做某件事。你爲什麼需要這樣做?

請注意,以上以上的選項都不會對您的字典進行整理。你不能那樣做;他們只需按照指定的順序對存儲在字典中的項目創建新的枚舉。