Come rimuovere i duplicati da Array Perl

June 18

Perl e molti altri linguaggi di programmazione usano array per memorizzare un elenco di dati. Tuttavia, Perl supporta anche una struttura di dati specifico chiamato un hash. Un hash Perl associa un valore particolare con una chiave. Un esempio è l'hash {Jan => 31, Apr => 30}, in cui un mese è una chiave e un numero di giorni è un valore. Un hash Perl rende possibile sviluppare un semplice algoritmo per rimuovere i duplicati da un array. La subroutine corrispondente ha meno di dieci comandi in Perl.

istruzione

La creazione di un sottoprogramma "Remove_duplicates;" un algoritmo

1 Ottenere i dati di matrice e dichiarare un hash "voci". Un altro array chiamato "new_array" conterrà dati non duplicati. I passi da 1 a 5 sono illustrate con il codice Perl data nella sezione 2, punto 3.

2 Assegnare tutti gli elementi di un array come le chiavi di hash e assegnare valori hash uguale a 1 per tutte le chiavi.

3 Loop attraverso tutti gli elementi dell'array e verificare il valore di hash associato a questo elemento.

4 Se il valore di hash è 1 (vedi punto 3), allora l'elemento è originale o meno duplicato e dovrebbe essere aggiunto al "new_array." Nello stesso tempo tale elemento è marcato; ossia il valore hash diventa 0.

5 Se il valore hash è 0, allora questo elemento è stato già rilevato; cioè viene duplicato e saltato.

Esempio e Perl programma

6 Rimuovere i duplicati dalla matrice con elementi (1 2 6 7 9 2 1 2 6).

7 Stampa matrici iniziali e finali (senza duplicati).

8 Sezione 1Subroutine Begins

remove_duplicates sub {
la mia ($ array, $ nuovo array) = @; #Step 1. Leggi matrice iniziale
i miei% voci = (); #Step 1. dichiarare l'hash

foreach (@ $ array) {
successivo se esiste $ voci {$};

$ voci {$} = 1; #Passo 2
}

foreach (@ $ array) {#Step 3. scorrere tutti gli elementi dell'array
if ($ voci {$ _}) {#Step 5. L'elemento viene saltato Se il valore hash è 0.
spingere @ $ nuovo array, $; #Step 4. Aggiungere un elemento al nuovo array solo se il valore hash è 1

$ voci {$ _} = 0; #Step 4. L'elemento è contrassegnato cioè modificare il valore hash per 0.
}

}
}

EndsSection sottoprogramma 2

il mio $ array = [QW (1 2 6 7 9 2 1 2 6)]; # Step1: una matrice esempio

il mio $ new_array = []; #

remove_duplicates ($ array, $ new_array);
print "@ $ array \ n"; #Step 2. Stampa matrice iniziale
print "@ $ new_array \ n"; # Stampa di matrice finale
Uscita;

Consigli e avvertenze

  • Subroutine "remove_duplicates" possono essere facilmente incorporati in qualsiasi programma Perl.