Checking for duplicates in a List of Objects C#

后端 未结 7 726
隐瞒了意图╮
隐瞒了意图╮ 2020-12-29 20:35

I am looking for a really fast way to check for duplicates in a list of objects.

I was thinking of simply looping through the list and doing a manual comparison th

7条回答
  •  甜味超标
    2020-12-29 21:22

    You need to reference System.Linq (e.g. using System.Linq)

    then you can do

    var dupes = dupList.GroupBy(x => new {x.checkThis, x.checkThat})
                       .Where(x => x.Skip(1).Any());
    

    This will give you groups with all the duplicates

    The test for duplicates would then be

    var hasDupes = dupList.GroupBy(x => new {x.checkThis, x.checkThat})
                       .Where(x => x.Skip(1).Any()).Any();
    

    or even call ToList() or ToArray() to force the calculation of the result and then you can both check for dupes and examine them.

    eg..

    var dupes = dupList.GroupBy(x => new {x.checkThis, x.checkThat})
                       .Where(x => x.Skip(1).Any()).ToArray();
    if (dupes.Any()) {
      foreach (var dupeList in dupes) {
        Console.WriteLine(string.Format("checkThis={0},checkThat={1} has {2} duplicates",
                          duplist.Key.checkThis, 
                          duplist.Key.checkThat,
                          duplist.Count() - 1));
      }
    
    }
    

    Alternatively

    var dupes = dupList.Select((x, i) => new { index = i, value = x})
                       .GroupBy(x => new {x.value.checkThis, x.value.checkThat})
                       .Where(x => x.Skip(1).Any());
    

    Which give you the groups which each item per group stores the original index in a property index and the item in the property value

提交回复
热议问题