Vb.net 如何确定一个数组或一系列变量是否按顺序出现?
我有7个数值,零或更大,按一周中的每一天排序。只有一个或多个值可能大于零。我需要一种方法来确定>0值是否在单个序列中出现 例如: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
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请向我们展示您的函数,而不是用文字解释它。我接受这个答案,因为它是第一个并且有效。谢谢!谢谢!我会坚持下去!