积极答复者
求怎样从一维数组中搜索一维数组返回一个32位整数?

问题
答案
-
求怎样从一维数组中搜索一维数组返回一个32位整数?
Dim W(2) As Byte
W(2) = 54
W(1) = 67
W(0) = 71Dim J(1) As Byte
J(1) = 67
J(0) = 71MsgBox(Array.IndexOf(W, J))
显示 - 1 没搜索到 ,怎么办?
谢谢了。。。
思路这样:
假设有A和B两个数组,我要从A中寻找B数组的起始位置(假设只重复一次)——
1)A长度小于B,直接退出;
2)A长度等于B,如果其中某个元素不等于B,直接退出;
3)A长度大于B,那么:A的第一个元素和B的第一个元素比较,等于的话两个数组的第二个元素比较……直到全部相同为止退出。如果B中的某个元素不等于A,那么A的元素下标自增1,直到A的索引大于等于A总长度。
【代码】
Module Module1 Sub Main() Dim W(2) As Byte W(2) = 54 W(1) = 67 W(0) = 71 Dim J(1) As Byte J(1) = 67 J(0) = 71 Dim i As Integer = 0 Dim k As Integer = 0 While (i <= UBound(W) AndAlso k <= UBound(J)) If (W(i) = J(k)) Then i += 1 k += 1 Else k = 0 '不相同,k从头开始计数 End If End While If (i >=W.Length) Then '表示找不到 Console.WriteLine("-1") Else Console.WriteLine(Array.IndexOf(W, J(0))) End If End Sub End Module
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处
- 已标记为答案 Jie BaoModerator 2012年1月27日 2:10
- 已编辑 ThankfulHeartModerator 2012年1月27日 7:25
- 取消答案标记 谢学校 2012年1月29日 5:18
- 已标记为答案 谢学校 2012年1月29日 5:21
全部回复
-
您要的是这样?
Dim W(2) As Byte W(2) = 54 W(1) = 67 W(0) = 71 Dim J(1) As Byte J(1) = 67 J(0) = 71 MsgBox(Array.IndexOf(W, J(0))) MsgBox(Array.IndexOf(W, J(1)))
- The blog of typewriter職人
- Convert C# to VB.NET
- /*If my concept is wrong ,please correct me.Thanks.*/
-
你好,楼主:)
IndexOf后面一个参数只能跟随的是一个数组中的元素,并不是数组本身;所以你可以这样做:
Module Module1 Sub Main() Dim W(2) As Byte W(2) = 54 W(1) = 67 W(0) = 71 Dim J(1) As Byte J(1) = 67 J(0) = 71 '先寻找W是否包含J全部元素 If (W.Intersect(J).Count() = J.Count()) Then '如果满足,直接返回J元素第一个在W中的位置 Console.WriteLine(Array.IndexOf(W, J(0))) End If End Sub End Module
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处 -
一般VB语法: Dim firstPos As Integer For i As Integer = 0 To J.Length - 1 If i = 0 Then firstPos = Array.IndexOf(W, J(i)) Else If firstPos + 1 = Array.IndexOf(W, J(i)) Then firstPos = firstPos + 1 Else MsgBox("The W does not contain J") Exit For End If MsgBox(Array.IndexOf(W, J(0))) End If Next
或者.Net 3.0后的VB.Net 语法:
Dim firstPos As Integer = Array.IndexOf(W, J(0)) Dim result As Boolean = False Array.ForEach(J, Sub(p As Byte) If firstPos + 1 = Array.IndexOf(W, p) Then firstPos = firstPos + 1 result = True Else result = False Exit Sub End If End Sub) If result Then MsgBox(Array.IndexOf(W, J(0))) Else MsgBox("The W does not contain J") End If
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已标记为答案 谢学校 2012年1月26日 6:11
- 取消答案标记 谢学校 2012年1月26日 6:39
- 已建议为答案 Jie BaoModerator 2012年1月27日 2:10
-
求怎样从一维数组中搜索一维数组返回一个32位整数?
Dim W(2) As Byte
W(2) = 54
W(1) = 67
W(0) = 71Dim J(1) As Byte
J(1) = 67
J(0) = 71MsgBox(Array.IndexOf(W, J))
显示 - 1 没搜索到 ,怎么办?
谢谢了。。。
思路这样:
假设有A和B两个数组,我要从A中寻找B数组的起始位置(假设只重复一次)——
1)A长度小于B,直接退出;
2)A长度等于B,如果其中某个元素不等于B,直接退出;
3)A长度大于B,那么:A的第一个元素和B的第一个元素比较,等于的话两个数组的第二个元素比较……直到全部相同为止退出。如果B中的某个元素不等于A,那么A的元素下标自增1,直到A的索引大于等于A总长度。
【代码】
Module Module1 Sub Main() Dim W(2) As Byte W(2) = 54 W(1) = 67 W(0) = 71 Dim J(1) As Byte J(1) = 67 J(0) = 71 Dim i As Integer = 0 Dim k As Integer = 0 While (i <= UBound(W) AndAlso k <= UBound(J)) If (W(i) = J(k)) Then i += 1 k += 1 Else k = 0 '不相同,k从头开始计数 End If End While If (i >=W.Length) Then '表示找不到 Console.WriteLine("-1") Else Console.WriteLine(Array.IndexOf(W, J(0))) End If End Sub End Module
QQ我:
下载MSDN桌面工具(Vista,Win7)
我的博客园
慈善点击,点击此处
- 已标记为答案 Jie BaoModerator 2012年1月27日 2:10
- 已编辑 ThankfulHeartModerator 2012年1月27日 7:25
- 取消答案标记 谢学校 2012年1月29日 5:18
- 已标记为答案 谢学校 2012年1月29日 5:21