Vb.net 如何确定一个数组或一系列变量是否按顺序出现?

Vb.net 如何确定一个数组或一系列变量是否按顺序出现?,vb.net,Vb.net,我有7个数值,零或更大,按一周中的每一天排序。只有一个或多个值可能大于零。我需要一种方法来确定>0值是否在单个序列中出现 例如: 0, 8, 8, 0, 0, 0, 0 将是一个单一的序列,而 8, 0, 8, 8, 8, 0, 0 有两个独立的序列,因此不符合条件。如果在整个分组中只有一个大于零值,我还希望它被视为合格序列 我从一个函数开始,它接受7个变量,并根据每个变量是零还是非零将它们填充到一个布尔数组中——对于0为false,对于>0为true,这给了我类似于 {false, tru

我有7个数值,零或更大,按一周中的每一天排序。只有一个或多个值可能大于零。我需要一种方法来确定>0值是否在单个序列中出现

例如:

0, 8, 8, 0, 0, 0, 0
将是一个单一的序列,而

8, 0, 8, 8, 8, 0, 0
有两个独立的序列,因此不符合条件。如果在整个分组中只有一个大于零值,我还希望它被视为合格序列

我从一个函数开始,它接受7个变量,并根据每个变量是零还是非零将它们填充到一个布尔数组中——对于0为false,对于>0为true,这给了我类似于

{false, true, true, false, false, false, false}
现在我需要确定该数组的内容是否包含符合上述限定条件的限定序列。有什么想法吗

不管它值多少钱,到目前为止,这是我的功能:

Public Function IsConcurrent(D1, D2, D3, D4, D5, D6, D7) As Boolean
  Dim arr(6) As Single
  arr(0) = D1
  arr(1) = D2
  arr(2) = D3
  arr(3) = D4
  arr(4) = D5
  arr(5) = D6
  arr(6) = D7

  Dim concurrent As Boolean = False
  If CSng(arr(0)) > 0 Then concurrent = True
  For k = 2 To 7
    If arr(k - 1) = arr(k - 2) Then
    Else
    End If
  Next

  Return concurrent
End Function

。。。我使用
列表
而不是数组编写了这篇文章,但是结构是相同的

我是这样做的:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim x As List(Of Integer) = {0, 0, 8, 8, 8, 0, 0}.ToList

    Dim Test As Boolean = LookForSingleSequence(x)
End Sub


Private Function LookForSingleSequence(ByVal MyList As List(Of Integer)) As Boolean

    Dim i As Integer
    Dim RetVal As Boolean = False
    Dim SeqEnded As Boolean = False

    For i = 0 To MyList.Count - 1
        If MyList(i) > 0 Then
            If SeqEnded = True Then
                RetVal = False
                Exit For
            Else
                RetVal = True
            End If
        End If

        If RetVal = True And MyList(i) <= 0 Then SeqEnded = True
    Next

    Return RetVal

End Function
Private Sub Form1\u Load(ByVal sender作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
Dim x As List(整数的)={0,0,8,8,8,0,0}.ToList
作为布尔值的Dim测试=LookForSingleSequence(x)
端接头
私有函数LookForSingleSequence(ByVal MyList作为列表(整数))作为布尔值
作为整数的Dim i
Dim RetVal为布尔值=False
Dim SEQEND为布尔值=False
对于i=0到MyList.Count-1
如果MyList(i)>0,则
如果seqend=True,则
RetVal=False
退出
其他的
RetVal=True
如果结束
如果结束

如果RetVal=True且MyList(i)那么LINQ解决方案就出现了——代码行更少,希望更容易理解:

Sub Main()
  Dim lst As New List(Of Integer)({0, 8, 8, 0, 0, 0, 0})
  Console.WriteLine(IsConcurrent(lst)) 'True
  lst = New List(Of Integer)({8, 0, 8, 8, 8, 0, 0})
  Console.WriteLine(IsConcurrent(lst)) 'False
  Console.ReadLine()
End Sub

Private Function IsConcurrent(ByVal lst As List(Of Integer)) As Boolean
  Dim elementsAfterZeros = lst.SkipWhile(Function(x) x <= 0)
  If elementsAfterZeros.Count = 0 Then Return False 'we only have zeros
  Dim elementsInSecondGroupOfNonZeros = elementsAfterZeros.
                                        SkipWhile(Function(x) x > 0).
                                        SkipWhile(Function(x) x <= 0)
  If elementsInSecondGroupOfNonZeros.Count = 0 Then Return True
  Return False
End Function
Sub-Main()
Dim lst作为(整数的)新列表({0,8,8,0,0,0,0})
Console.WriteLine(IsConcurrent(lst))'True
lst=新列表(整数)({8,0,8,8,8,0,0})
Console.WriteLine(IsConcurrent(lst))为False
Console.ReadLine()
端接头
私有函数IsConcurrent(ByVal lst作为(整数的)列表)作为布尔值

Dim element safterzeros=lst.SkipWhile(函数(x)x请向我们展示您的函数,而不是用文字解释它。我接受这个答案,因为它是第一个并且有效。谢谢!谢谢!我会坚持下去!