我有一个行列表,每行都有一个点列表(x,y)。我想找到所有行中最大的“x”,所以我写了以下函数:
Private Function ObtainMaxX() As Double
Dim maxX As Double = Double.MinValue
For Each l As Line In _lines
Dim points As List(Of Point) = l.ObtainPoints
For Each p As Point In points
If p.X > maxX Then
maxX = p.X
End If
Next
Next
Return maxX
End Function
一切正常。但是现在我想在所有的行中获得更小的“x”。因此,除了我们为“Double.MaxValue”和“>”更改“Double.MinValue”之外,执行此操作所需的功能几乎与前一个功能相同。为“<”。
你知道如何以更简单的方式完成所有这些工作,没有代码重复吗?
谢谢!
答案 0 :(得分:4)
您可以使用属于Enumerable.Min
命名空间的Max
/ System.Linq
:
Dim maxX As Double = c.ObtainLines.Select(Function(p) p.X).Max()
Dim minX As Double = c.ObtainLines.Select(Function(p) p.X).Min()
所以你必须先Select
X
属性。
修改:如果您想要找到最大/最小X
整体,可以使用SelectMany
:
Dim allPoints = _lines.SelectMany(Function(l) l.ObtainLines)
Dim maxX = allPoints.Select(Function(p) p.X).Max()
Dim minX = allPoints.Select(Function(p) p.X).Min()
查询语法相同:
Dim allPointX = From line in _lines
From point in l.ObtainLines
Select point.X
Dim maxX = allPointX.Max()
Dim minX = allPointX.Min()