列表中包含两个属性的项目

Items with both properties contained in a list

我有一个对象列表 X(名称为 x),具有相同类型 Location 的属性 ab。我还有一个位置列表 y。我需要在 x 中找到列表 y.

中包含 ab 的所有对象

我可以用循环和 Wheres 来完成,但由于两个列表都很大,我需要一个性能非常好的解决方案。在这种情况下有什么方法可以使用 Intersect 吗?或者别的什么?

这里是一些伪代码

class X
{
    Location a;
    Location b;
}

GetMatches(List<X> x, List<Location> y) { ?? }

首先将 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()
        .AsOrdered()
        .Where(item => y.Contains(item.a) && y.Contains(item.b))
        .ToList();
}