написание собственного компаратора для linq groupby
Опять же, этот пример - очень упрощенная версия моей настоящей проблемы, связанной с пользовательским компаратором для группировки linq. Что я сделал не так?
Код ниже дает результат ниже (1.2, 0), (4.1, 0), (4.1, 0), (1.1, 0),
однако я ожидал следующего, так как 1.1 и 1.2 <1.0. (1.2, 0), (1.1, 0), (4.1, 0), (4.1, 0),
class Program
{
static void Main(string[] args)
{
IEnumerable<Point> points = new List<Point> {
new Point(1.1, 0.0)
, new Point(4.1, 0.0)
, new Point(1.2, 0.0)
, new Point(4.1, 0.0)
};
foreach (var group in points.GroupBy(p => p, new PointComparer()))
{
foreach (var num in group)
Console.Write(num.ToString() + ", ");
Console.WriteLine();
}
Console.ReadLine();
}
}
class PointComparer : IEqualityComparer<Point>
{
public bool Equals(Point a, Point b)
{
return Math.Abs(a.X - b.X) < 1.0;
}
public int GetHashCode(Point point)
{
return point.X.GetHashCode()
^ point.Y.GetHashCode();
}
}
class Point
{
public double X;
public double Y;
public Point(double p1, double p2)
{
X = p1;
Y = p2;
}
public override string ToString()
{
return "(" + X + ", " + Y + ")";
}
}