如何在C#中对哈希集的坐标进行排序

时间:2019-05-07 11:58:44

标签: c# sorting hashset

enter image description here

我将坐标值保存在HashSet中。

我想按上面的图片对它进行排序。

下面是使用哈希集的典型点结构。

struct Point
{
    public int x, y;
    public Point(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
}

private HashSet<Point> hashset = new HashSet<Point>();

我找到了一个仅对一个值排序的源。

但是,我还没有找到对两个值或坐标值进行排序的来源。

给我一​​个如何对坐标进行排序的例子。

2 个答案:

答案 0 :(得分:2)

您可以使用自定义比较器来实现所需的功能,并在其中定义自己的规则:

var comparer = Comparer<Point>.Create((p1, p2) =>
{
    if (p1.y < p2.y)
    {
       return p1.x > p2.x ? 1 : -1;
    } 
    else
    {
       return p1.x < p2.x ? 1 : -1;
    }
});

hashset.OrderBy(p => p, comparer)

P.S。不能100%地确定所有条件都是正确的,但是您希望得到这个主意,以便您可以在此示例之后编写所需的逻辑。

答案 1 :(得分:1)

points.OrderBy(p => Math.Atan2(p.y, p.x))

应该可以解决问题。

它将按照从原点(即从“西”开始沿顺时针方向)测量的方向对点进行排序

如果希望以基于集合的结构维持该顺序,则需要重新考虑一下,因为HashSet<T>没有隐式顺序。