2015-05-14 66 views
1

如何連接並刪除重複的字典這樣的串聯重複鍵:建立一個新的字典,基於價值觀

Item1: Key=1, Value=test1 
Item2: Key=2, Value=test2 
Item3: Key=3, Value=test1 
Item4: Key=4, Value=test3 
Item5: Key=5, Value=test4 

要建立一個新的解釋是這樣的:

Item1: Key=1-3, Value=test1 
Item2: Key=2, Value=test2 

Item4: Key=4, Value=test3 
Item5: Key=5, Value=test4 

我設法使用此獲取重複項:myDictionary.GroupBy(x => x.Value).Where(x => x.Count() > 1);
但我無法找到正確的方式來從此建立一個新的詞典。

回答

4

這適用於採取所有重複的項目進入一個新的字典,一個共享密鑰:

var dict = new Dictionary<string, string> 
{ 
    {"1", "test1"}, 
    {"2", "test2"}, 
    {"3", "test1"} 
}; 

var groupedKeyMap = dict.GroupBy(x => x.Value) 
         .Where(x => x.Count() > 1) 
         .ToDictionary(x => string.Join("-", x.Select(y => y.Key)), 
             x => x.Key); 

如果同時需要重複和不重複的鍵值對,刪除Where條款:

var groupedKeyMap = dict.GroupBy(x => x.Value) 
         .ToDictionary(x => string.Join("-", x.Select(y => y.Key)), 
             x => x.Key); 
+0

不應該是選擇而不是selectmany? –

+0

@BobVale兩種方式,但編輯我的答案。謝謝。 –

+0

@YuvalItzchakov是這樣做的,但結果詞典不包含沒有重複的項目,我需要這些留在那裏,任何想法如何做到這一點? –