对 2D 点列表进行排序(首先按 X,然后按 Y)
我试图首先按 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
I am trying to sort a List of 2D Points first by x co-ordinate and then by y co-ordinate.
I implemented the IComparer interface as follows:
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;
}
}
}
And then call my sorting as follows:
pointsList.Sort(new PointComparer());
For some reason the list doesn't sort. Surely is something very simple and silly, but stuck on this for quite a while....TIA
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这应该效果更好:
如果 X 值不同,它将使用 Y 值进行排序。这与您的代码不同,如果 Y 值相同,则将使用 X 值。
正如其他人提到的,如果您可以使用 Linq,则应该使用
OrderBy
和ThenBy
扩展方法:This should work better:
If the X values are different, it will use the Y value for sorting. This is different from your code, where X values will be used if the Y values are the same.
As others have mentioned, if you can use Linq, you should use the
OrderBy
andThenBy
extension methods:能不能不使用OrderBy ->然后由?
http://msdn.microsoft.com/en-us/library/bb534743。 ASPX
Could you not use OrderBy -> ThenBy?
http://msdn.microsoft.com/en-us/library/bb534743.aspx
为什么不:
Why not: