同样,这个示例是我实际问题的一个非常简化的版本,涉及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) …Run Code Online (Sandbox Code Playgroud)