Schreiben eines benutzerdefinierten Vergleichs für linq groupby
Again dieses Beispiel ist eine sehr vereinfachte Version meines eigentlichen Problems mit einem benutzerdefinierten Vergleicher für die Linq-Gruppierung. Was habe ich falsch gemacht
Der folgende Code ergibt das folgende Ergebnis (1.2, 0), (4.1, 0), (4.1, 0), (1.1, 0),
jedoch habe ich folgendes erwartet da 1.1 und 1.2 <1.0 auseinander liegen. (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 + ")";
}
}