2

我正在尝试先按 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;
        }

    }
}

然后按如下方式调用我的排序:

pointsList.Sort(new PointComparer());

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

4

3 回答 3

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

  }
}

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

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

pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
于 2010-05-08T15:13:39.873 回答
1

你不能使用 OrderBy -> ThenBy 吗?

http://msdn.microsoft.com/en-us/library/bb534743.aspx

于 2010-05-08T15:08:48.163 回答
0

为什么不:

var sorted = pointsList.OrderBy(p => p.X)
                       .ThenBy(p => p.y)
于 2010-05-08T15:15:34.330 回答