对2D点列表进行排序(首先是X然后是Y)

Mik*_*kos 2 c# sorting icomparable points

我试图先按x坐标,然后按y坐标对2D点列表进行排序.我实现了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;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

然后调用我的排序如下:

pointsList.Sort(new PointComparer());
Run Code Online (Sandbox Code Playgroud)

由于某种原因,列表不排序.肯定是非常简单和愚蠢的事情,但坚持了很长一段时间...... TIA

Ode*_*ded 6

这应该更好:

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;
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

如果X值不同,它将使用Y值进行排序.这与您的代码不同,如果Y值相同,将使用X值.

正如其他人提到的,如果你可以使用Linq,你应该使用OrderByThenBy扩展方法:

pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
Run Code Online (Sandbox Code Playgroud)

  • 这几乎和他一样,除了你有一个拼写错误"first.X == first.X"......这总是正确的,所以其他人永远不会打 (3认同)