• Publicidad

Eliminar elementos repetidos de array

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

Eliminar elementos repetidos de array

Notapor xagutxu_perez » 2008-04-06 02:24 @142

Hola a todos:

Tengo un problemilla con el cual me gustaría que me ayudarais. Tengo un array de cadenas de caracteres (de unos 200 elementos), y quisiera eliminar los elementos que están repetidos; la cadena consta, más o menos de 75 elementos diferentes, y quisiera crear otro array con esos 75 elementos, partiendo del de 200.
¿Alguien conoce una forma óptima de hacer eso? Estoy intentando con 'for' anidados, pero tarda relativamente mucho en procesar...

Gracias,

Xagutxu
xagutxu_perez
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2008-04-04 03:56 @206

Publicidad

Notapor explorer » 2008-04-06 06:35 @316

Tu mismo has dado la solución:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
foreach $caracter ( @array ) {
    push @nuevo_array, $caracter if not $visto_antes{$caracter}++;
}
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

if not

Notapor xagutxu_perez » 2008-04-06 13:01 @584

Gracias, pero me queda una pequeña duda (perdón por mi ignorancia):

¿Qué hace la parte del "if not"? No entiendo muy bien la condición...

Gracias de nuevo,

Xagutxu
xagutxu_perez
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2008-04-04 03:56 @206

Notapor explorer » 2008-04-06 13:15 @594

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
push @nuevo_array, $caracter if not $visto_antes{$caracter}++;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

"Guarda en el @nuevo_array el $caracter si no se ha %visto_antes ese $caracter".

En esa línea, primero se ejecuta la parte del 'if' para ver si debemos guardar el carácter o no. En el 'if', primero miramos el valor de $visto_antes{ $caracter }. Esto es un elemento del hash %visto_antes.

Si un $caracter, es la primera vez que le vemos, entonces $visto_antes{ $caracter } será 0 (más bien, será nulo, porque no existirá). Entonces, con el efecto contrario del 'not', se invierte la condición, y se activa positivamente el 'if', guardando el $caracter en @nuevo_array. Luego, incrementa (++) el valor $visto_antes{$caracter} (que valdrá, lógicamente, 1).

Si un $caracter, NO es la primera vez que le vemos, entonces $visto_antes{ $caracter } será 1 (puesto por el efecto de incremento comentado antes). Por el 'not', se invierte el resultado, y el 'if' falla, por lo que el $caracter no se guarda.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 3 invitados

cron