我有一个点列表,每个点定义为“XYPoint”类型的对象,具有X和Y成员。 如何在点列表中找到具有最大X或最大Y值的点,而不是循环(Linq?)?
public class XYPoint
{
int X;
int Y;
}
List<XYPoint> lsRawPoints;
答案 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;
}