根据范围获取特定的列表项

时间:2018-12-17 14:39:35

标签: vb.net

我的班级为$sess = New-PSSession -Credential (Get-Credential) $dateTime = Invoke-Command -Session $sess -ScriptBlock { Get-Date -Format "o" } ,如下所示。我也有Merge类,其中包含MergeCollection的列表。关键是它们的Merge可能有许多合并。现在我想通过min, max and value并在我的列表中发现passedValue在最小和最大之间。请注意,列表中只能有一个合并,其中passedValue的值可能为Nothing-在这种情况下,Nothing表示不定式。因此,我们可以像Max那样将100表示​​为不定式。我确保首先检查是否已存在这种合并。另一方面:

  

->如果列表中没有Min = 100 and Max = Nothing在最小和最大函数之间的合并,则应返回Nothing。

     

->如果通过某种方式存在两次或多次合并,则随机选择其中之一。

     

->如果列表不包含任何项目,则返回Nothing

实现这种功能的最简单方法是什么?

passedValue

编辑:边界

2 个答案:

答案 0 :(得分:1)

我不清楚边界是包含范围还是排他范围,但是更改条件运算符很容易,这应该可以帮助您:

Public Function GetMergeBy(passedValue As Integer) As Merge
    Dim result = _merges.Where(Function(m) m.Min < passedValue AndAlso passedValue < If(m.Max,Integer.MaxValue)).ToList()

    If result.Count == 0 Then Return Nothing

    Static rnd As New Random()
    Return result(rnd.Next(result.Count))
End Function

答案 1 :(得分:0)

怎么样

Private Shared PRNG As New Random
Public Function GetMergeBy(passedValue As Integer) As Merge
    Dim mie As IEnumerable(Of Merge)
    If Me._merges IsNot Nothing Then
        'bounds are inclusive or exclusive???
        'as coded inclusive
        mie = From m In Me._merges
                Where passedValue >= m.Min AndAlso (Not m.Max.HasValue OrElse passedValue <= m.Max)
                Select m
        Return mie(PRNG.Next(mie.Count))
    End If
    Return Nothing
End Function

编辑:看起来很像乔尔(Joel)回答;)