-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[41] Come posso rimuovere gli elementi duplicati da una lista o da un array?

(contributo di brian d foy)

Usate un hash. Quando state pensando alle parole "unico" oppure "duplicato", state pensando alle "chiavi di un hash".

Se non vi importa dell'ordine degli elementi, potreste semplicemente creare l'hash e poi estrarre le chiavi. Non è importante come create quell'hash: ma è importante che usiate la funzione keys per ottenere gli elementi unici.

   my %hash   = map { $_, 1 } @array;
   # oppure uno slice di hash: @hash{ @array } = ();
   # oppure un foreach: $hash{$_} = 1 foreach ( @array );
   my @unici = keys %hash;

Potete anche iterare per ogni elemento e tralasciare quelli che avete già incontrato. Utilizzate un hash per tenerne traccia. La prima volta che nel loop si incontra un elemento, questo elemento non ha alcuna chiave in %visti. L'istruzione next crea la chiave ed usa immediatamente il suo valore, che è undef, di modo che il loop vada avanti alla push ed incrementi il valore per quella chiave. La volta successiva che nel loop si incontra lo stesso elemento, la sua chiave esiste già nell'hash e il valore per quella chiave è vero (visto che non è né 0 né undef), dunque il next salta l'iterazione e nel loop si va all'elemento successivo.

	my @unici = ();
	my %visti   = ();
	foreach my $elemento ( @array )
		{
		next if $visti{ $elemento }++;
		push @unici, $elemento;
		}

Potete scriverlo in maniera più concisa usando un grep, che fa la medesima cosa.

   my %visti = ();
   my @unici = grep { ! $visti{ $_ }++ } @array;

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google