获取点列表中的最大值

时间:2014-10-27 17:31:55

标签: c# .net

我有一个点列表,每个点定义为“XYPoint”类型的对象,具有X和Y成员。 如何在点列表中找到具有最大X或最大Y值的点,而不是循环(Linq?)?

public class XYPoint
{
    int X;
    int Y;
}
List<XYPoint> lsRawPoints;

4 个答案:

答案 0 :(得分:6)

最大X位置:

lsRawPoints.Max(point => point.X)

最高Y位置

lsRawPoints.Max(point => point.Y)

组件的最大总和

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

答案 1 :(得分:1)

你可以使用如下的lambda函数。

    XYPoint maxx = lsRawPoints.OrderBy(t=>t.X).Last();//Max X value
    XYPoint maxy = lsRawPoints.OrderBy(t=>t.Y).Last();//Max Y value

答案 2 :(得分:1)

您使用Max查找集合的最大值。你可以传递一个像这样的转换函数:

lsRawPoints.Max(p => p.Y); //Gets maximum Y value

类似于:

lsRawPoints.Select(p => p.Y).Max();

无论哪种方式,请注意这是仍然迭代(循环)整个集合;所以你没有真正避免你在问题中陈述的问题。

LINQ通过利用延迟执行/迭代使迭代更有效,但是如果你反正整个集合(如Max所要求的那样),它只是为循环提供更多的语义函数调用写了你自己。

答案 3 :(得分:1)

我个人只是使​​用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;
}