Foros del Web » Programando para Internet » ASP Clásico »

Comparar 2 Arreglos de dimensiones distintas

Estas en el tema de Comparar 2 Arreglos de dimensiones distintas en el foro de ASP Clásico en Foros del Web. Hola a todos: El problema que tengo es el siguiente, resulta que quiero comparar 2 arreglos con la peculiaridad de que son de distinta dimension, ...
  #1 (permalink)  
Antiguo 08/08/2008, 13:09
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta Comparar 2 Arreglos de dimensiones distintas

Hola a todos:

El problema que tengo es el siguiente, resulta que quiero comparar 2 arreglos con la peculiaridad de que son de distinta dimension, ejemplo:

arreglo 1={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}
arreglo 2={1,4,7,12}

Entre estos dos arreglos lo que pretendo hacer es comparar qué elementos del arreglo 2 estan en el arreglo 1, para de ahi mostrar mediante checkbox seleccionados, cuales de todos los elementos del arreglo 1 estan repetidos en el arreglo 2... ejemplifico lo que pretendo hacer...

ARREGLO 1

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16


ARREGLO 2

1 4 7 12


RESULTADO

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

No sé si me explique, ojala y puedan ayudarme, se los agradeceré bastante

Saludos y gracias por cualquier ayuda....
  #2 (permalink)  
Antiguo 08/08/2008, 15:24
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 3 meses
Puntos: 88
Respuesta: Comparar 2 Arreglos de dimensiones distintas

2 ciclos for(el ciclo mas extenso primero), una pregunta(se pregunta si X(i)=Y(z)), guardar los iguales en una variable tipo arreglo(redim preserve temporal)
realizar el ciclo para mostrar checkbox(for each item in temporal)

sera posible?
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 08/08/2008, 16:51
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
Pregunta Respuesta: Comparar 2 Arreglos de dimensiones distintas

Hola Shiryu_Libra:

Claro que fue posible tu solución... he implementado el código de esta manera:

Código HTML:
<%	
	Dim docs1
	docs1=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
	Dim docs2
	docs2=array(1,4,7,12)
	Dim docs3(),docs4()
	Dim i,j,k,l,m,n,p,q
    r=0
	for p=LBound(docs1) to UBound(docs1)
		for q=LBound(docs2) to UBound(docs2)
			if docs1(p)= docs2(q) then
				redim preserve docs3(r)
				docs3(r)=docs1(p)
				r=r+1
			end if
		next	
	next
	for n=LBound(docs3) to UBound(docs3)
		response.write("<input type='checkbox' checked='checked' value="&docs3(n)&">"&docs3(n)&"&nbsp;")
	next
%> 
Y el resultado de ello es:
1 4 7 12

lo cual es bastante aceptable excepto algunas cosas que falta arreglar, la intención que tengo es que de todo el arreglo en pantalla me muestre los datos repetidos(que es lo que obtuve con el código anterior) más todos los demas elementos que no estan repetidos, es decir, algo como mostrar todo el arreglo en conjunto y seleccionar solo aquellos elementos que se repiten, algo como lo siguiente:

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

Agradeceria bastante otra ayuda(una más)....

Saludos y gracias por todo...
  #4 (permalink)  
Antiguo 08/08/2008, 19:14
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 5 meses
Puntos: 98
Respuesta: Comparar 2 Arreglos de dimensiones distintas

Me puse curioso, es que son las birras que tengo encima, a ver si te funciona algo asi:

Código:
<%
Option Explicit
Dim docs1,docs2,i,j,cssClass

Sub Inicializa()
	docs1 = Array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)
	docs2 = Array(1,4,7,12)
End Sub

Function DetectaRepetidos(arr1,arr2,cssClass)
	Dim arr1copia, arr2Copia

	if isArray(arr1) and isArray(arr2) then
		if uBound(arr1) > uBound(arr2) then
			arr1Copia = arr1
			arr2Copia = arr2
		else
			arr1Copia = arr2
			arr2Copia = arr1		
		end if

		for i = 0 to uBound(arr1Copia)
			for j = 0 to uBound(arr2Copia)
				if arr2Copia(j) = arr1Copia(i) then
					arr1Copia(i) = "<span class="""&cssClass&""">"&arr1Copia(i)&"</span>"
					exit for
				end if
			next
		next		
	end if
	
	DetectaRepetidos = arr1Copia
End Function

Sub ImprimeArreglo(arr1)
	if isArray(arr1) then
		for i = 0 to uBound(arr1)
			Response.Write(arr1(i))
		next
	else
		Response.Write("Nada que imprimir")
	end if
End Sub
%>

<style type="text/css">
	.subrayar
	{
		font-weight: bold;
		text-decoration: underline;
	}
</style>
<%
cssClass = "subrayar"
Call Inicializa()
Call ImprimeArreglo(DetectaRepetidos(docs1,docs2,cssClass))
%>
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 11/08/2008, 10:55
Avatar de ciisteado  
Fecha de Ingreso: enero-2008
Ubicación: Home Office
Mensajes: 111
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Comparar 2 Arreglos de dimensiones distintas

Hola:

Excelente aporte u_goldman vaya que sirvio tu código es tal cual lo que necesitaba, estoy muy agradecido con tu ayuda...

Y para tener varias alternativas a la mano, despues de investigar y darle vueltas al problema tambien encontre esta solución:

Código HTML:
<%
	'Declara variables a utilizar
	Dim docs1
	Dim docs2
	Dim docs3(),docs4(),docs5(),docs6()
	Dim f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,Elemento,Nduplicado
	docs1=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16)	
	docs2=array(1,4,7,12)
	'Llena docs3 con los valores de docs1 y docs2 (el orden realmente no importa)
	for f=LBound(docs2) to UBound(docs2)
		redim preserve docs3(g)
		docs3(g)=docs2(f)
		g=g+1
		for h=LBound(docs1) to UBound(docs1)
			redim preserve docs3(i)
			docs3(i)=docs1(h)
			i=i+1
		next
	next
	for j = LBound(docs3) To UBound(docs3)  'Llena un arreglo temporal(docs4) con los datos de docs3, para velidar los elementos repetidos entre estos 2 arreglos 
		redim preserve docs4(j)
		docs4(j) = docs3(j)
	next  
       
	For k = 0 To UBound(docs3)   'Recorre los elementos de los arreglos
		m = 0   
		For l = 0 To UBound(docs3)	'Compara si el elemento de docs3 es igual al elemento de docs4
			If docs3(k) = docs4(m) And l <> k Then	'Si son iguales entonces Elimina el valor repetido   
				docs3(l) = ""
			End If  
			m = m + 1   
		Next
	Next

	n=0 'Recorre cada elemento del arreglo,
	For Each Elemento In docs3   
		If Elemento <> "" Then 'Si el elemento es distinto de una cadena vacia, asigna el valor al arreglo final "docs5"
			redim preserve docs5(n) 
			docs5(n)=Elemento
			n=n+1
		end if
	Next
%> 
Lo cual da como resultado:

Arreglo Compuesto:

1,4,7,12,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

Docs 1:
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

Docs 2:
1,4,7,12

Docs 5:
1,4,7,12,2,3,5,6,8,9,10,11,13,14,15,16

El código obviamente esta adaptado a mis necesidades, pero les dejo tambien el post original de este codigo para que le den un vistazo Eliminar duplicados en un Array

Asi pues ahi dejo dos soluciones practicas y sencillas a este problema, ya dependera de cada quien por cual decidirse...

Gracias a los que ayudaron ... Shiryu_Libra, u_goldman Master's mis respetos...

Saludos cordiales...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:05.