Compare values of two arrays - classic asp

前端 未结 3 614
北海茫月
北海茫月 2020-11-30 08:38

How can I Compare values of two arrays to check if 1 array does not have an element of another array for example -

array1(0) = 85
array1(1) = 459
array1(2)          


        
相关标签:
3条回答
  • 2020-11-30 08:47

    Here's an example which offers multiple ways to compare - has a nice demo too.

    http://www.aspkey.net/aspkey/_articles/asp/showarticle.asp?id=110

    0 讨论(0)
  • 2020-11-30 08:48

    This function:

    Function diffArray( aA, aB )
      ' !! http://en.wikipedia.org/wiki/Union_%28set_theory%29
      ' The union of two sets A and B is the collection of points which are in A or
      ' in B (or in both)
      Dim dicU : Set dicU = CreateObject( "Scripting.Dictionary" )
      ' !! http://en.wikipedia.org/wiki/Intersection_%28set_theory%29
      ' the intersection of two sets A and B is the set that contains all elements
      ' of A that also belong to B (or equivalently, all elements of B that also
      ' belong to A)
      Dim dicI : Set dicI = CreateObject( "Scripting.Dictionary" )
      ' !! http://en.wikipedia.org/wiki/Complement_%28set_theory%29
      ' If A and B are sets, then the relative complement of A in B, also known as
      ' the set-theoretic difference of B and A, is the set of elements in B, but
      ' not in A. The relative complement of A in B is denoted B \ A
      Dim dicAB : Set dicAB = CreateObject( "Scripting.Dictionary" )
      Dim dicBA : Set dicBA = CreateObject( "Scripting.Dictionary" )
      Dim vItem
      For Each vItem In aA
          dicU(  vItem ) = 0 ' all from A go into UNI (all from B added later)
          dicAB( vItem ) = 0 ' all from A go into A\B (all from B removed later)
      Next
      For Each vItem In aB
          dicU( vItem ) = 0 ' all from B are added to UNI
          If dicAB.Exists( vItem ) Then ' B item found in (current) A\B
             dicI( vItem ) = 0 ' goes into INT
             dicAB.Remove vItem ' and must be removed from A\B
          Else ' B item not fount in (current) A\B
             If Not dicI.Exists( vItem ) Then dicBA( vItem ) = 0 ' goes to B/A if not already in INT
    '        dicBA( vItem ) = 0 ' bug: would add item previously removed from A\B to INT
          End If
      Next
      diffArray = Array( dicU.Keys, dicI.Keys, dicAB.Keys, dicBA.Keys )
    End Function
    

    avoids the N*N loopings of D-Money's proposal. (BTW: The fact that in VBScript you specify the size of an array by giving its UBound (last index) may surprise users of other languages, but that does not justify code that fails if arrays don't have spurious tails.)

    Code to demonstrate that function:

      Dim aA   : aA   = Split( "85 459 90 85" )
      Dim aB   : aB   = Split( "4711 459 90 4711" )
      Dim aRes : aRes = diffArray( aA, aB )
      WScript.Echo "A  :", Join( aA )
      WScript.Echo "B  :", Join( aB )
      WScript.Echo "UNI:", Join( aRes( 0 ) ), "in A or B"
      WScript.Echo "INT:", Join( aRes( 1 ) ), "in A and B"
      WScript.Echo "A\B:", Join( aRes( 2 ) ), "in A but not in B"
      WScript.Echo "B\A:", Join( aRes( 3 ) ), "in B but not in A"
    

    Output:

    A  : 85 459 90 85
    B  : 4711 459 90 4711
    UNI: 85 459 90 4711 in A or B
    INT: 459 90 in A and B
    A\B: 85 in A but not in B
    B\A: 4711 in B but not in A
    

    For another sample use, see this question.

    0 讨论(0)
  • 2020-11-30 09:08
    Dim array1(3)
    Dim array2(2)
    
    array1(0) = 85
    array1(1) = 459
    array1(2) = 90
    
    array2(0) = 459
    array2(1) = 90
    
    Dim i 'As Integer
    Dim j 'As Integer
    Dim isFound 'As Boolean
    
    For i = 0 To UBound(array1) - 1
        isFound = False
        For j = 0 To UBound(array2) - 1
            If array1(i) = array2(j) Then
                isFound = True
            End If
        Next 'j
        If Not isFound Then
            Response.Write array1(i) & " not found<br />"
        End If
    Next 'i
    
    0 讨论(0)
提交回复
热议问题