C# 如何在C中使用LINQ从口述记录中删除项目#

C# 如何在C中使用LINQ从口述记录中删除项目#,c#,linq,C#,Linq,我需要从口述中删除一个特定的项目 口述语就像 dict["Key1"]="Value1" dict["Key2"]="Value2" dict["Key3"]="Value3" dict["Key4"]="Value2" 如果另一项具有相同的值,如何使用LINQ删除该项 提前感谢您需要使用。您需要使用。检查@Jon Skeet的原始答案: 通过@Jon Skeet检查原始答案: 这假定您希望删除最后一个重复项,其中last定义为最后一个序号字符串

我需要从口述中删除一个特定的项目

口述语就像

      dict["Key1"]="Value1"
      dict["Key2"]="Value2"
      dict["Key3"]="Value3"
      dict["Key4"]="Value2"
如果另一项具有相同的值,如何使用LINQ删除该项


提前感谢

您需要使用。

您需要使用。

检查@Jon Skeet的原始答案:


通过@Jon Skeet检查原始答案:

这假定您希望删除最后一个重复项,其中last定义为最后一个序号字符串值

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

var dupKeys = dict.GroupBy(innerD => innerD.Value)
                .Where(mergedByValue => mergedByValue.Count() > 1).Dump()
                .SelectMany(mergedByValue => mergedByValue.Select(m => m.Key));
这假定您希望删除最后一个重复项,其中last定义为最后一个序号字符串值

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

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

这里是我的测试解决方案:

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

这里是我的测试解决方案:

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

@隐姓埋名:谢谢你。。。您是正确的,但我需要在创建dictional后删除重复项。&Pramodh,您是不正确的,distinct不会帮助您根据对象的属性筛选集合,并且仍然使用关联的属性。您是否检查了链接。这不是SQL独特的。您可以在现有词典上使用它。是吗?现在试着用它来获取所有不同值的键。@Graphain我同意它为您提供了轻松获取不同值的方法。@Incognito:谢谢。。。您是正确的,但我需要在创建dictional后删除重复项。&Pramodh,您是不正确的,distinct不会帮助您根据对象的属性筛选集合,并且仍然使用关联的属性。您是否检查了链接。这不是SQL独特的。您可以在现有词典上使用它。是吗?现在试着用它来获取所有不同值的键。@Graphain我同意它为您提供了一种轻松获取不同值的方法。您要删除哪个项目,带键2的项目还是带键4的项目?检查更新的答案您要删除哪个项目,带键2的项目或带键4的项目?检查更新的答案此答案实际上很聪明。我不知道GroupBy采用了“选择此”参数。这个答案其实很聪明。不知道接受“选择此”参数的GroupBy。