小编Dus*_*tyB的帖子

为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) …
Run Code Online (Sandbox Code Playgroud)

linq iequalitycomparer

9
推荐指数
2
解决办法
3464
查看次数

标签 统计

iequalitycomparer ×1

linq ×1