Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C根据函数对列表进行排序_C# - Fatal编程技术网

C# C根据函数对列表进行排序

C# C根据函数对列表进行排序,c#,C#,我有一个要排序的点列表 产生的排序顺序应根据从列表中获取一个点以及两个固定点作为输入的函数的输出 决定排序的函数如下所示: 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

我有一个要排序的点列表

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

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

    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函数和两个固定点以正确排序列表?

首先,您需要使用3个点作为成员构建类角度。 然后做一个角度来完成接口


最后,如果我正确理解您的问题,您可以有一个列表:您有一个点列表,我将它们称为列表myListOfPoints

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

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)));

祝你好运!你有什么问题吗?需要一些关于列表和“其他2点”的信息。它们也在列表中吗?除了这个函数,你还尝试了什么来获取角度?你到底想排序什么?发布代码,以便我们可以看到项目列表以及它与此函数的关系。也许你可以创建一个列表他有一个点列表作为输入。另外两个输入是固定点。他希望根据指定函数的输出对第一个点列表进行排序。试着帮助新人。他的问题可以表述得更好,但尽量帮助人们,而不是给他们留下坏印象。。。