我将坐标值保存在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>();
我找到了一个仅对一个值排序的源。
但是,我还没有找到对两个值或坐标值进行排序的来源。
给我一个如何对坐标进行排序的例子。
答案 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>
没有隐式顺序。