2010-02-01 131 views

回答

8
var dictionaryList = 
    myDic.GroupBy(pair => pair.Key.KeyType) 
     .OrderBy(gr => gr.Key) // sorts the resulting list by "KeyType" 
     .Select(gr => gr.ToDictionary(item => item.Key, item => item.Value)) 
     .ToList(); // Get a list of dictionaries out of that 

如果您想通过“关键字类型”到底键入词典的词典时,该方法是相似的:

var dictionaryOfDictionaries = 
    myDic.GroupBy(pair => pair.Key.KeyType) 
     .ToDictionary(gr => gr.Key,   // key of the outer dictionary 
      gr => gr.ToDictionary(item => item.Key, // key of inner dictionary 
            item => item.Value)); // value 
1

我相信下面的工作?

dictionary 
    .GroupBy(pair => pair.Key.KeyType) 
    .Select(group => group.ToDictionary(pair => pair.Key, pair => pair.Value); 
0

所以你实际上想要一个IDictionary<MyKey, IList<MyValue>>类型的变量?

0

你可以只使用LINQ的的GroupBy功能:

  var dict = new Dictionary<Key, string> 
        { 
         { new Key { KeyType = KeyTypes.KeyTypeA }, "keytype A" }, 
         { new Key { KeyType = KeyTypes.KeyTypeB }, "keytype B" }, 
         { new Key { KeyType = KeyTypes.KeyTypeC }, "keytype C" } 
        }; 

     var groupedDict = dict.GroupBy(kvp => kvp.Key.KeyType); 

     foreach(var item in groupedDict) 
     { 
      Console.WriteLine("Grouping for: {0}", item.Key); 
      foreach(var d in item) 
       Console.WriteLine(d.Value); 
     } 
0

除非你只是希望有独立的集合:

Dictionary myKeyTypeColl<KeyType, Dictionary<MyKey, KeyVal>> 
0
Dictionary <int,string> sports; 
sports=new Dictionary<int,string>(); 
sports.add(0,"Cricket"); 
sports.add(1,"Hockey"); 
sports.add(2,"Badminton"); 
sports.add(3,"Tennis"); 
sports.add(4,"Chess"); 
sports.add(5,"Football"); 
foreach(var spr in sports) 
console.WriteLine("Keu {0} and value {1}",spr.key,spr.value); 

输出:

Key 0 and value Cricket 
Key 1 and value Hockey 
Key 2 and value Badminton 
Key 3 and value Tennis 
Key 4 and value Chess 
Key 5 and value Football 
相关问题