2010-06-30 85 views
1

我需要從dictonary刪除指定的項目從Dictonary項目..如何刪除在C#中使用LINQ

的dictonary就像

 dict["Key1"]="Value1" 
     dict["Key2"]="Value2" 
     dict["Key3"]="Value3" 
     dict["Key4"]="Value2" 

如何在另一個項目中刪除該項目具有使用LINQ

在此先感謝

+1

你要什麼要刪除的項目,與密鑰2項或有Key4的那個? – 2010-06-30 06:41:34

+0

檢查更新後的答案 – 2010-06-30 06:42:34

+0

@ David_001:Key 4 – 2010-06-30 06:51:23

回答

3

這裏我測試的解決方案:

dict.GroupBy(x => x.Value, x => x.Key) 
.Where(x => x.Count() > 1) 
.SelectMany(x => x.Skip(1)) 
.ToList().ForEach(x => dict.Remove(x)) 
+0

這個答案其實很聰明。不知道有關「選擇此」參數的GroupBy。 – 2010-06-30 07:05:37

0

您需要使用Distinct相同的值。

+0

@ Incognito:謝謝你......你是對的,但我需要在創建dictonary之後刪除重複項。 – 2010-06-30 06:33:55

+0

&Pramodh,你是不正確的,distinct不會幫助你過濾基於對象屬性的集合,並仍然使用相關的屬性。 – 2010-06-30 06:47:21

+0

您是否檢查了鏈接。這不是SQL獨特的。你可以在現有的字典上使用它。 – Incognito 2010-06-30 06:47:37

3

檢查原單由@喬恩飛碟雙向回答:C#: Remove duplicate values from dictionary?

var uniqueValues = myDict.GroupBy(pair => pair.Value) 
         .Select(group => group.First()) 
         .ToDictionary(pair => pair.Key, pair => pair.Value); 
1
var dupKeys = dict.GroupBy(innerD => innerD.Value) 
       .Where(mergedByValue => mergedByValue.Count() > 1) 
       .Select(mergedByValue => mergedByValue.OrderByDescending(m => m.Key).First().Key); 

dict.Where(d => dupKeys.Contains(d.Key)).ToList() 
    .ForEach(d => dict.Remove(d.Key)); 

這是假設你想要的最後重複刪除,其中最後被定義爲最後的序數字符串值。

如果你想刪除所有重複,你dupKeys改成這樣:

var dupKeys = dict.GroupBy(innerD => innerD.Value) 
       .Where(mergedByValue => mergedByValue.Count() > 1).Dump() 
       .SelectMany(mergedByValue => mergedByValue.Select(m => m.Key));