Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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#_.net - Fatal编程技术网

C# 获取点列表中的最大值

C# 获取点列表中的最大值,c#,.net,C#,.net,我有一个点列表,每个点定义为XYPoint类型的对象,具有X和Y成员。 如何在点列表中找到最大X或最大Y值的点,缺少循环Linq public class XYPoint { int X; int Y; } List<XYPoint> lsRawPoints; 最大X位置: lsRawPoints.Max(point => point.X) 最大Y位置 lsRawPoints.Max(point => point.Y) 最大分量和 lsRawPoin

我有一个点列表,每个点定义为XYPoint类型的对象,具有X和Y成员。 如何在点列表中找到最大X或最大Y值的点,缺少循环Linq

public class XYPoint
{
    int X;
    int Y;
}
List<XYPoint> lsRawPoints;
最大X位置:

lsRawPoints.Max(point => point.X)
最大Y位置

lsRawPoints.Max(point => point.Y)
最大分量和

lsRawPoints.Max(point => point.X + point.Y)

等等。

您可以像下面这样使用lambda函数

    XYPoint maxx = lsRawPoints.OrderBy(t=>t.X).Last();//Max X value
    XYPoint maxy = lsRawPoints.OrderBy(t=>t.Y).Last();//Max Y value
您可以使用Max查找集合的最大值。您可以向其传递一个变换函数,如下所示:

lsRawPoints.Max(p => p.Y); //Gets maximum Y value
这类似于:

lsRawPoints.Select(p => p.Y).Max();
不管是哪种方式,请注意这仍在循环整个集合;所以你实际上没有回避你在问题中提到的问题

LINQ通过利用延迟执行/迭代提高了迭代的效率,但是如果您按照Max的要求对整个集合进行迭代,那么它只是为您自己编写的循环提供了一个更具语义的函数调用。

我个人只会使用foreach循环来避免在列表上多次传递

int maxX = int.MinValue;
int maxY = int.MinValue;

foreach (var point in lsRawPoints)
{
    if (point.X > maxX)
        maxX = point.X;
    if (point.Y > maxY)
        maxY = point.Y;
}

你试过什么?你说的最高点是什么意思。最大值是4,2还是2,4?你试过使用LINQ了吗?你看过Max方法吗?请注意,当前您的X和Y字段是私有的-它们实际上是类中的私有字段,还是公共属性?我不熟悉Linq,但我认为这比循环更有效。如果有一个包含X和Y的XYPoint对象列表,我需要得到max X和max Y。因此,在您的示例4,2和2,4中,它将是MaxX=4和MaxY=4。由于max没有为类XYPoint定义,您仍然没有说您想要什么。但是linq更有效的原因是它很懒惰。我不认为你能做到这一点,但我不知道你说的马克斯是什么意思,我也不确定。有时候,我不明白你的否决方案!我问了一个人们理解并回答的问题。这是一个合理的问题,为什么要否决投票??我有一个点列表,每个点定义为一个具有x和y值的对象,我需要能够找到一个x值高于其他点的点。如果我已经有我的答案并接受了DLeh发布的答案,这怎么可能是不清楚的?有些人需要停止电源跳闸+1.另一种有时必要的方法是lsRawPoints.OrderByp=>p.X.Last.Thank DLeh。这就是我要找的。@heltonbiker这太棒了。我得到的x/y坐标XYPoint对象具有最高的x值。谢谢大家。你们说得对,但Linq语法更优雅。@NoBullMan无疑更优雅。我只是想确保OP明白它仍然在循环,这似乎是我在问题中看到的一个重要误解。