SoloCodigo

Programación Web y Scripting => Perl => Mensaje iniciado por: FEckEZ en Viernes 14 de Marzo de 2003, 00:52

Título: Re: iguales...
Publicado por: FEckEZ en Viernes 14 de Marzo de 2003, 00:52
hola..

como puedo borrar los valores repetidos que se encuentran en un array.. por ejemplo:

$texto='mmm aaa mmm sss ss';
@partes=split(/ /,$texto);

devolveria:
partes[0]='mmm'
partes[1]='aaa'
partes[2]='mmm'
partes[3]='sss'
partes[4]='ss'

ahora, como puedo borrar los elementos iguales en esta lista... en el caso anterior, borrar del array partes[2], que es el unico repetido en este caso.

gracias
Título: Re: iguales...
Publicado por: entius54 en Viernes 14 de Marzo de 2003, 18:57
sub condense {
   my(undef,$array)=@_;
   my(@condensed);
   my($valid) = 1;
   while ($#$array >= 0) {
      foreach (@condensed) {
         $valid = 0 if ($array->
         }
      if ($valid) {
         push @condensed, shift @$array;
         } else {
         shift @$array;
         }
      $valid = 1;
      }

   @$array = @condensed;
   }

Donde le enviarias tu array via referencia y no te devolvería nada porque ya cambiaría el array original.

$obj->condensed(@tuarray);
por ejemplo
Título: Re: iguales...
Publicado por: FEckEZ en Viernes 14 de Marzo de 2003, 19:53
mucho mas que interesante tu funcion.. muchisimas gracias por tu respuesta.
Título: Re: iguales...
Publicado por: entius54 en Sábado 15 de Marzo de 2003, 02:15
pues dame las grácias visitando perlattack.com
:birthday::guitar::hippi::comp:
Título: iguales...
Publicado por: FEckEZ en Domingo 16 de Marzo de 2003, 04:56
ya habia estado alli y habia leido un tutorial de perl... aunque por ahora esta muy corto, esta muy bien porque no se extienden mucho en cosas que son facilmente entendibles... aunque claro esta.. seria buenisimo si vas agregando mas contenido.
Título: Re: iguales...
Publicado por: explorer en Domingo 9 de Julio de 2006, 03:23
Todo lo que tenga que ver con repetición, es una caso muy bueno para usar los hashes:
Código: Text
  1.     1 #!/usr/bin/perl -l
  2.     2 $texto='mmm aaa mmm sss ss';
  3.     3 @partes=split(/ /,$texto);
  4.     4
  5.     5 foreach my $parte ( @partes ) {
  6.     6     next if $ya_visto{ $parte }++;
  7.     7     push @revisado, $parte;
  8.     8 }
  9.     9
  10.    10 print "@revisado";
  11.  
* Hacemos un bucle por cada uno (foreach) de los elementos de @partes.
* En la línea 6 decimos que si ya lo hemos visto, pase al siguiente elemento. Explicación: Cada $parte se introduce en la memoria asociativa %ya_visto con un valor que va creciendo (la primera vez será un 0 lo que se reciba en el if, por lo que la $parte termina guardandose (push) en @revisado. Pero si es una $parte repetida, entonces devolverá un uno (o dos o tres...) con lo que se activa el next y no se guarda.