如何使用C#中的LINQ从Dictionary中删除项目

时间:2010-06-30 06:27:32

标签: c# linq

我需要从字典中删除特定项目。字典就像

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

如果其他项目使用LINQ

具有相同的值,如何删除该项目

提前致谢

4 个答案:

答案 0 :(得分:3)

检查@Jon Skeet的原始答案: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 :(得分: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))

答案 2 :(得分: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));

这假设您希望删除 last 副本,其中last被定义为最后的序数字符串值。

如果您要删除所有重复项,请将dupKeys更改为:

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

答案 3 :(得分:0)

您需要使用Distinct