C# 对二维点列表排序(先按X排序,然后按Y排序)

C# 对二维点列表排序(先按X排序,然后按Y排序),c#,sorting,icomparable,points,C#,Sorting,Icomparable,Points,我正在尝试对2D点列表进行排序,首先是x坐标,然后是y坐标。 我实现了IComparer接口,如下所示: class PointComparer : IComparer<Point> { public int Compare(Point x, Point y) { if (x.Y != y.Y) { return x.Y - y.Y; } else {

我正在尝试对2D点列表进行排序,首先是x坐标,然后是y坐标。 我实现了IComparer接口,如下所示:

class PointComparer : IComparer<Point>
{
    public int Compare(Point x, Point y)
    {
        if (x.Y != y.Y)
        {
            return x.Y - y.Y;
        }
        else
        {
            return x.X - y.X;
        }

    }
}

由于某种原因,列表没有排序。当然,这是一件非常简单和愚蠢的事情,但在这件事上坚持了很长一段时间……TIA

你能不能不使用OrderBy->ThenBy


这应该更有效:

class PointComparer : IComparer<Point>
{
  public int Compare(Point first, Point second)
  {
    if (first.X == second.X)
    {
        return first.Y - second.Y;
    }
    else
    {
        return first.X - second.X;
    }

  }
}
为什么不:

var sorted = pointsList.OrderBy(p => p.X)
                       .ThenBy(p => p.y)

为什么要将
IntPoint
Point
进行比较?很抱歉,这是个错误。更正。那不是先按Y再按X排序吗?另外,
x
y
在这种情况下是很糟糕的名称。所谓“不排序”,是指列表的顺序与您开始时的顺序相同,还是只是它不能正常工作?表示根本不排序,原始顺序保持不变。Thx。但是运气不好,原来的顺序保持不变。这几乎和他一样,只是你的错别字是“first.X==first.X”。。。这总是正确的,所以else永远不会成功。虽然这应该有效,但这不是OP所要求的。他想知道自己的方法哪里做错了(即为什么使用比较器不起作用),虽然这应该起作用,但这不是OP所要求的。他想知道自己的方法哪里做错了(即为什么使用比较器不起作用)
pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
var sorted = pointsList.OrderBy(p => p.X)
                       .ThenBy(p => p.y)