C# 对二维点列表排序(先按X排序,然后按Y排序)
我正在尝试对2D点列表进行排序,首先是x坐标,然后是y坐标。 我实现了IComparer接口,如下所示: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 {
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)