[Perl] Pregunta #3
Salvador Ortiz Garcia
sog@msg.com.mx
12 Mar 2002 12:15:12 -0600
On Tue, 2002-03-12 at 10:38, Mercado Benavides Andres wrote:
>=20
>=20
> On Tue, 12 Mar 2002, Alejandro G. Bedoya wrote:
>=20
> > Si hacemos el doble foreach, realmente multiplicamos el Tama=F1oLis=
ta 1
> > por el Tama=F1oLista 2, haciendose para listas largas millones de
> > comparaciones... Pero si sumanos las Listas, vamos a tener un numero mu=
cho
> > mas peque=F1o de comparaciones que hacer... La soluci=F3n entonces:
> >=20
>=20
> Si solo quieres eliminar repetidos, no funcionaria hacer dos hashes y
> unirlos?, es decir;
No.
>=20
> @lista =3D (@reales, @mientras);
> %hash1 =3D @lista; #me aseguro que @lista[2n] sean unicos
Aqui lo que tienes en %hash1 son los elementos pares de @reales como
llaves y los impares como datos.
> [ Resto eliminado ]
Soluci=F3n simple si lo quisieras hacer en memoria, usando el m=E9todo 2
anotado en mail anterior:
%hash =3D map { ($_ =3D> 1) } @reales; # Construyo un hash de @reales
push @reales, grep { !$hash{$_} } @mientras; # Agrego los que no
# est=E1n.=20
Ahora que, si las listas son grandes se usa la misma idea, pero operando
en disco.
Saludos.
Salvador Ortiz.