Dom Abr 06, 2008 1:24 am
|
|
|
| Eliminar elementos repetidos de array |
|
|
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 |
|
|
|
Dom Abr 06, 2008 12:01 pm
|
|
|
| if not |
|
|
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 |
|

Dom Abr 06, 2008 12:15 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| Perl: | push @nuevo_array, $caracter if not $visto_antes{$caracter}++; |
"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. |
|

Powered by phpBB © 2001, 2005 phpBB Group
|