• Publicidad

Elementos repetidos array

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Elementos repetidos array

Notapor securedigital » 2009-03-17 13:58 @624

¡Hola a todos!
Buff, ha sido un larguísimo tiempo desde mi anterior post, jeje.

Esta vez estoy liado con un programilla, y tengo un problemilla.

Pues éste tiene una array llena de URL (@hrefs) y dentro de ella hay valores repetidos.

La intención era mostrar únicamente las URL que como mínimo contengan ($target) que target podría ser por ejemplo ("MyDom.com") de forma que al listar y filtrar la array, solo muestre los que tengan ese criterio.

Hasta aquí lo hace bien... el problema es que como hay URL repetidas, pues me muestra la misma URL 7 u 8 veces... y la cuestión sería hacer un unique y que solo mostrara una vez cada uno.

He estado probando con ese for() anidado, y algunos ejemplos de Internet, pero no consigo que lo muestre, al printar la nueva array con los valores únicos no muestra nada, está undef.

¿Alguna idea de qué estoy pasando por alto?

Gracias.

PD: no me gustaría usar Array::Unique, es un poco lammer xD

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$href =~ s/.html//g; #eliminem extensio .html
$href =~ s/\/dns\///g; #eliminem /dns/

foreach $href (@hrefs) {
    #tie @hrefs, 'Array::Unique';
    if ($href =~ /$target/) {
        $demo = $href;
        @uniqarr = ();
        foreach $1 (@hrefs) {
            if ($1 eq $demo) {
                push(@uniqarr,$i);
            }
        }
    }
}
foreach $aaa (@uniqarr) { print "$aaa\n"; }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381

Publicidad

Notapor explorer » 2009-03-17 14:22 @640

A ver, varias cosas...

Recordar que la utilización de variables en bucles for() provoca una local()ización de la variable, así que la $href que usas en el primer foreach() es una nueva variable que empieza a tener todos los valores de @hrefs. Y al final del bucle, $href 'vuelve' a ser la de antes del bucle.

Ejemplo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$href = "URL1";

for $href ( qw( URL2 URL3 ) ) {

    print "$href\n";
}

print "$href\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
La salida de este trozo de programa es:
Código: Seleccionar todo
URL2
URL3
URL1


Otro detalle: NO es nada recomendable usar variables especiales como variables de bucle. Me refiero a $1 en el segundo foreach().

En cuanto al problema principal, la de detectar valores únicos de un arreglo, hay algunos hilos donde lo hemos comentado. Por ejemplo: ¿Buscar dentro de un array?.

Por otra parte, funciones unique hay unas cuantas en CPAN. Una de ellas, la de List::MoreUtils:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use List::MoreUtils qw(uniq);

my @uniqarr = uniq grep { /$target/ } @hrefs;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Si no quieres usar un módulo, puedes copiar el código de esta función.

Aunque entonces... te da lo mismo usar el módulo :)

Actualización: Más información: perldoc perlfaq4 / How can I remove duplicate elements from a list or array?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor securedigital » 2009-03-19 09:19 @430

mmhh, es verdad, muchas gracias por avisarme de los errores de estructuración. Se agradece mucho.

El vínculo de perldoc me fue fantástico, lo estoy implementando ahora mismo, muchísimas gracias.

Saludos
securedigital
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2008-05-24 08:09 @381


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron