我有一个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
。