我正在尝试先按 x 坐标然后按 y 坐标对二维点列表进行排序。 我按如下方式实现了 IComparer 接口(interface):
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
最佳答案
这应该会更好:
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,则应该使用 OrderBy
和 ThenBy
扩展方法:
pointsList.OrderBy(p => p.X).ThenBy(p => p.y)
关于c# - 对 2D 点列表进行排序(首先按 X 然后按 Y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794547/