c# - 对 2D 点列表进行排序(首先按 X 然后按 Y)

标签 c# sorting icomparable points

我正在尝试先按 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,则应该使用 OrderByThenBy 扩展方法:

pointsList.OrderBy(p => p.X).ThenBy(p => p.y)

关于c# - 对 2D 点列表进行排序(首先按 X 然后按 Y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2794547/

相关文章:

python - 如何在 python 子列表中填写未使用的 ip 地址?

java - 开关未按预期工作

c# - 假设 this != null 在实现 IComparable<T> 时

c# - 如何有效隐藏Windows Phone 8.1软键盘?

c# - 在 ASP.NET 中使用 C# 全局变量的正确方法?

java - 在每个级别上保持排序的反向树集排序

c# - 此搜索方法中 IComparable 和 IComparable<T> 的区别

c# - iComparable 接口(interface)工作

c# - "Interface name is not valid at this point"

c# - 标签数组不工作 c#