我有一个对象X
(名称为x
)的列表,它们具有属性a
和b
,具有相同的类型Location
。我也有位置列表y
。我需要找到x
和a
包含在列表b
中的y
中的所有对象。
我可以使用循环和Where
来做到这一点,但是由于两个列表都很庞大,因此我需要一个性能很好的解决方案。在这种情况下,有什么方法可以使用Intersect
?还是其他?
这里有一些伪代码
class X
{
Location a;
Location b;
}
GetMatches(List<X> x, List<Location> y) { ?? }
答案 0 :(得分:1)
首先将y列表转换为HashSet
。
var yHashSet = y.ToHashSet();
然后轻松快速地找到匹配项:
private static List<X> GetMatches(List<X> x, HashSet<Location> y)
{
return x
.Where(item => y.Contains(item.a) && y.Contains(item.b))
.ToList();
}
使其平行以变得更快:
private static List<X> GetMatchesParallel(List<X> x, HashSet<Location> y)
{
return x
.AsParallel()
.Where(item => y.Contains(item.a) && y.Contains(item.b))
.ToList();
}