Search code examples
listlinqduplicateslinq-group

Select duplicates from multiple lists


I have an array of List<int>, I'm using LINQ (thanks to this forum), to find duplicates, but after merging lists into one list, how can I retrieve a dictionary like this :

KEY -> duplicate value | VALUE -> list index where duplicate was found

Actually I'm doing this :

List<int> duplicates = hits.GroupBy(x => x)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToList();

Guess I should use SelectMany


Solution

  • You can map every element to (item, index) and then it will be easy to selected impacted indexes for each key.

    var duplicates = hits.Select((item, index) => new {item, index})
        .GroupBy(x => x.item)
        .Where(g => g.Count() > 1)
        .Select(g => new {Key = g.Key, Indexes = g.ToList().Select(x => x.index)})
        .ToList();