none
求怎样从一维数组中搜索一维数组返回一个32位整数? RRS feed

  • 问题

  • 求怎样从一维数组中搜索一维数组返回一个32位整数?

           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))

    显示  - 1     没搜索到 ,怎么办?

    谢谢了。。。

    2012年1月23日 11:57

答案

  • 求怎样从一维数组中搜索一维数组返回一个32位整数?

           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))

    显示  - 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我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年1月26日 13:17
    版主

全部回复

  • 您要的是这样?

     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)))
    


    2012年1月23日 12:35
  • 不行 我要搜索一维数组, 那样出现的太多,也不对。

            J(1) = 67
            J(0) = 71
    在一维数组中 71,67 这两个数要挨着出现才行。


    2012年1月23日 12:54
  • 你好,楼主:)

    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我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处
    • 已标记为答案 谢学校 2012年1月26日 6:11
    • 取消答案标记 谢学校 2012年1月26日 6:22
    • 已标记为答案 谢学校 2012年1月26日 6:23
    • 取消答案标记 谢学校 2012年1月26日 6:23
    2012年1月24日 8:46
    版主
  • 一般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月24日 9:17
    版主
  • 求怎样从一维数组中搜索一维数组返回一个32位整数?

           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))

    显示  - 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我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年1月26日 13:17
    版主