传递约束作为参数

时间:2014-01-13 14:30:55

标签: vb.net optimization constraints

我有一个行列表,每行都有一个点列表(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”之外,执行此操作所需的功能几乎与前一个功能相同。为“<”。

你知道如何以更简单的方式完成所有这些工作,没有代码重复吗?

谢谢!

1 个答案:

答案 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()