垂直然后水平排序点

2 c# sorting

我有一个数组,Points我想垂直和水平排序.

我应该两次排序吗?

Coi*_*oin 13

不,你不能只是排序两次,因为.Net框架Sort()算法是一个不稳定的排序,这意味着当你对项目进行排序时,他们原来所在的顺序没有被考虑在内,也就是说,当两个项目相等时,他们相对于彼此的位置将是不确定的.

您需要做的是为您要排序的类实现自定义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)

用法:

List<Point> list = ...;
list.Sort(new PointComparer());
Run Code Online (Sandbox Code Playgroud)