C# 3.0: Need to return duplicates from a List<>

前端 未结 8 1901
无人及你
无人及你 2020-12-23 19:05

I have a List<> of objects in C# and I need a way to return those objects that are considered duplicates within the list. I do not need the Distinct resultset, I need a

8条回答
  •  萌比男神i
    2020-12-23 20:01

    I inadvertently coded this yesterday, when I was trying to write a "distinct by a projection". I included a ! when I shouldn't have, but this time it's just right:

    public static IEnumerable DuplicatesBy
        (this IEnumerable source, Func keySelector)
    {
        HashSet seenKeys = new HashSet();
        foreach (TSource element in source)
        {
            // Yield it if the key hasn't actually been added - i.e. it
            // was already in the set
            if (!seenKeys.Add(keySelector(element)))
            {
                yield return element;
            }
        }
    }
    

    You'd then call it with:

    var duplicates = cars.DuplicatesBy(car => car.Color);
    

提交回复
热议问题