Compare los valores de dos matrices – ASP clásico

¿Cómo puedo comparar valores de dos matrices para verificar si 1 matriz no tiene un elemento de otra matriz, por ejemplo?

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

Quiero devolver los valores que no están presentes en la segunda matriz? Intenté con doble para bucles pero no funcionó bien para mí.

 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
" End If Next 'i

Esta función:

 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 

evita los N * N loopings de la propuesta de D-Money. (Por cierto: el hecho de que en VBScript especifique el tamaño de una matriz al dar su UBound (último índice) puede sorprender a los usuarios de otros idiomas, pero eso no justifica que el código falle si las matrices no tienen colas espurias).

Código para demostrar esa función:

  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" 

Salida:

 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 

Para otro uso de muestra, vea esta pregunta .

Aquí hay un ejemplo que ofrece múltiples formas de comparar: también tiene una buena demostración.

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