C#: Remove duplicate values from dictionary?

.net-3.5, c#, dictionary, linq

Solution

What do you want to do with the duplicates? If you don't mind which key you lose, just build another dictionary like this:

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);
    }
}

That assumes you're using .NET 3.5, admittedly. Let me know if you need a .NET 2.0 solution.

Here's a LINQ-based solution which I find pleasantly compact...

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

Problem

How can I create a dictionary with no duplicate values from a dictionary that may have duplicate values? ``` 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.??? ``` Edit: -I don't care which key is kept. - Is there something using Distinct() operation?

Original source