根据函数的 C# 排序列表

本文关键字:排序 列表 函数 | 更新日期: 2023-09-27 18:37:22

我有一个要排序的点列表。

生成的排序顺序应根据函数的输出,该函数从列表中获取一个点以及两个固定点作为输入。

决定排序的函数如下所示:

    public static double GetAngle(Point P1, Point P2, Point P3)
    {
        Point Vec1 = P1.Vector(P2);
        Point Vec2 = P1.Vector(P3);
        double angle = Math.Atan2(CrossProduct(Vec1, Vec2), Dot(Vec1, Vec2)) * 180 / Math.PI;
        if (angle < 0)
            angle += 360;
        return angle;
    }

其中 P1 是我从列表中输入的,P2 和 P3 是固定点。

如何将此 GetAngle() 函数和两个固定点结合起来以使列表正确排序?

根据函数的 C# 排序列表

如果我

正确理解你的问题:你有一个要点列表,我会称它们为List<Point> myListOfPoints

然后,我假设您的问题是如何根据MyFunc方法的输出对这些点进行排序。其中输出是列表中单个点和两个固定点的相对角度,在本例中,我只将其称为myFixedPoint1myFixedPoint2

myListOfPoints.Sort((a,b) => MyFunc(a, myFixedPoint1, myFixedPoint2).CompareTo(MyFunc(b, myFixedPoint1, myFixedPoint2)));

或者通过部分应用定点来创建接受单个参数的排序函数:

var sortFunc = new Func<Point, double>(x => MyFunc(x, myFixedPoint1, myFixedPoint2));
myListOfPoints.Sort((a,b) => sortFunc(a).CompareTo(sortFunc(b)));

首先,你需要建立一个类Angle,以你的 3 点作为成员。然后使角度完成IC可比的内表面

最后,您可以进行List<Angle>并进行排序。这里有一个完整的示例:http://www.dotnetperls.com/icomparable