我有一个List<CustomPoint> points;,其中包含近百万个对象。
从此列表中,我想获取恰好发生两次的对象列表。最快的方法是什么?我也会对非Linq选项感兴趣,因为我可能也必须在C++中这样做。

public class CustomPoint
{
    public double X { get; set; }
    public double Y { get; set; }

    public CustomPoint(double x, double y)
    {
        this.X = x;
        this.Y = y;
    }
}

public class PointComparer : IEqualityComparer<CustomPoint>
{
    public bool Equals(CustomPoint x, CustomPoint y)
    {
        return ((x.X == y.X) && (y.Y == x.Y));
    }

    public int GetHashCode(CustomPoint obj)
    {
        int hash = 0;
        hash ^= obj.X.GetHashCode();
        hash ^= obj.Y.GetHashCode();
        return hash;
    }
}

根据this的答案,我试过了,
list.GroupBy(x => x).Where(x => x.Count() = 2).Select(x => x.Key).ToList();

但这在新列表中给出了零个对象。
有人可以指导我吗?

最佳答案

为了使代码正常工作,您需要将PointComparer的实例作为第二个参数传递给GroupBy

10-08 19:38