2015-09-06 71 views
0

确定这里简单的字典如何通过使用LINQ

Dictionary<string,int> dicClusters=new Dictionary<string,int>(); 

dicClusters.Add("A",1); 
dicClusters.Add("B",1); 
dicClusters.Add("C",2); 
dicClusters.Add("D",3); 

所以我想从这个

List<List<string>> lstGroupedByKeys=dicClusters.GroupBy(pr => pr.Value)... 

结果撰写列表类似下面获取密钥的列表与组一本词典值将

first list {"A","B"} 
second list {"C"} 
third list {"D"} 

我可以用多个foreach编码或使用for循环但是我相信它可以完成linQ和我想了解TY

C#.NET 4.5.2

回答

5

GroupBy是正确的道路要走,但是你需要另一个Select定义如何,每个组应表示:

List<List<string>> lstGroupedByKeys = 
    dicClusters.GroupBy(pr => pr.Value) 
       .Select(g => g.Select(pr => pr.Key).ToList()) 
       .ToList(); 

或使用基于语法的查询时

List<List<string>> lstGroupedByKeys = 
    dicClusters.GroupBy(pr => pr.Value, pr => pr.Key, (k, g) => g.ToList()) 
       .ToList(); 

这可能是更清洁:你可以使用不同的GroupBy超载

var lstGroupedByKeys = (from pr in dicClusters 
         group pr.Key by pr.Value into g 
         select g.ToList()).ToList(); 
+0

工作真棒ty。我尝试过与群组,但我无法完成它:D我也喜欢第一个解决方案,因为它对我更有意义 – MonsterMMORPG

+0

你能解释这个过载thingie它真的看起来不错。它是如何工作的? – MonsterMMORPG

+0

在msdn上有很好的描述:https://msdn.microsoft.com/en-us/library/vstudio/bb534493(v=vs.100).aspx – MarcinJuraszek