需要一种高效的方法来从列表中返回所有重复项

Eri*_*ric 2 c# linq lambda generic-list

我将使用一个包含大约500,000个项目的集合,并且正在寻找一种获得所有重复项目的好方法.仔细阅读这篇文章后,我看到最流行的解决方案是使用散列集.但是,如果我想让所有颜色为红色的汽车不仅仅是Car4和Car5呢?

Car1.Color = Red;

Car2.Color = Blue;

Car3.Color = Green;

Car4.Color = Red;

Car5.Color = Red;
Run Code Online (Sandbox Code Playgroud)

鉴于问题,这将是一个相当快速的方法吗?

编辑:我在那篇文章中看到,下面的代码可以很容易地改变,以满足我的需要.而且我不确定是否有更好的方法来解决问题,但我会留下帖子只是为了看.

var duplicates = from car in cars
                 group car by car.Color into grouped
                 from car in grouped
                 select car;
Run Code Online (Sandbox Code Playgroud)

dtb*_*dtb 9

您可以使用Enumerable.ToLookup扩展方法按颜色对汽车进行分组并检索一种颜色的所有汽车:

var cars = new List<Car> { car1, car2, car3, car4, car5 };
var lookup = cars.ToLookup(car => car.Color);
var redCars = lookup[Red];
// redCars == { car1, car4, car5 }
Run Code Online (Sandbox Code Playgroud)