C#:从字典中删除重复值?

标签 c# linq .net-3.5 dictionary

如何从一个可能有重复值的字典中创建一个没有重复值的字典?

IDictionary<string, string> myDict = new Dictionary<string, string>();

myDict.Add("1", "blue");
myDict.Add("2", "blue");
myDict.Add("3", "red");
myDict.Add("4", "green");


uniqueValueDict = myDict.???

编辑:

-我不在乎保留哪个 key 。 - 是否有使用 Distinct() 操作的东西?

最佳答案

您想对重复项做什么?如果您不介意丢失哪个键,只需像这样构建另一个字典:

IDictionary<string, string> myDict = new Dictionary<string, string>();

myDict.Add("1", "blue");
myDict.Add("2", "blue");
myDict.Add("3", "red");
myDict.Add("4", "green");

HashSet<string> knownValues = new HashSet<string>();
Dictionary<string, string> uniqueValues = new Dictionary<string, string>();

foreach (var pair in myDict)
{
    if (knownValues.Add(pair.Value))
    {
        uniqueValues.Add(pair.Key, pair.Value);
    }
}

诚然,这假设您使用的是 .NET 3.5。如果您需要 .NET 2.0 解决方案,请告诉我。

这是一个基于 LINQ 的解决方案,我发现它非常紧凑......

var uniqueValues = myDict.GroupBy(pair => pair.Value)
                         .Select(group => group.First())
                         .ToDictionary(pair => pair.Key, pair => pair.Value);

关于C#:从字典中删除重复值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1462101/

相关文章:

c# - ASP.NET C# 在gridview记录中显示按钮

c# - 一对一关系首先在 Entity Framework 代码中失败

c# - 只有一个匹配属性的 MoreLinq ExceptBy

c# - 如果值匹配,则从另一个字符串数组获取字符串

c# - "=>"是什么意思?

c# - .Net 中 LINQ 和 Lambda 表达式的效率和性能如何?

c# - 使用相同日期查询数据库不返回数据

c# - 开始 ASP.NET 和 C#

c# - 如何使用 LINQ 对序列中的相同值进行分组?

c# - WCF,更改端点的 baseAdress