2015-09-06 47 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