Perl e molti altri linguaggi di programmazione è possibile utilizzare le matrici per memorizzare un elenco di dati. Perl supporta tuttavia anche una struttura di dati specifici che richiama un hash. Un hash Perl associa un particolare valore a una chiave. Un esempio è l'hash {Jan = > 31, Apr = > 30}, in cui un mese è una chiave e un valore è un numero di giorni. Un hash Perl rende possibile sviluppare un algoritmo semplice per rimuovere i duplicati da una matrice. La subroutine corrispondente ha meno di dieci comandi in Perl.
Istruzioni
Creare una Subroutine "Remove_duplicates;" un algoritmo
1
Ottenere dati di matrice e dichiarare un hash "voci". Un'altra matrice chiamata "new_array" conterrà dati non duplicati. Con il codice Perl indicato nella sezione 2, punto 3 sono illustrati i passaggi da 1 a 5.
2
Assegnare tutti gli elementi di matrice come chiavi hash e valori hash uguali a 1 per tutte le chiavi.
3
Scorrere in ciclo tutti gli elementi della matrice e controllare il valore di hash associato a questo elemento.
4
Se il valore hash è 1 (Vedi punto 3) quindi l'elemento è originale o non duplicati e deve essere aggiunto al "new_array." Nello stesso tempo è contrassegnato questo elemento; cioè il valore di hash cambia a 0.
5
Se il valore hash è 0, questo elemento è stato già rilevato; cioè è duplicato e saltato.
Esempio e programma in Perl
6
Rimuovere i duplicati dalla matrice con elementi (1 2 6 7 2 9 1 2 6).
7
Stampa matrici iniziale e finale (senza duplicati).
8 Sezione 1Subroutine inizia
Sub remove_duplicates () {
mio ($array, $newarray) = @; #Step 1. Matrice iniziale lettura
mio entries=() %; #Step 1. Dichiarare l'hash
foreach (@$array) {
$entries {$
successivo se esiste $entries {$};
}
foreach (@$array) {#Step 3. Scorrere in ciclo tutti gli elementi della matrice
if($Entries{$_}) {#Step 5. L'elemento viene ignorato se il valore hash è 0.
spingere @$newarray, $; #Step 4. Aggiungere un elemento nella nuova matrice solo se il valore hash è 1
$entries {$_} = 0; #Step 4. L'elemento è contrassegnato cioè modificare il valore di hash su 0.
}
}
}
Subroutine EndsSection 2
mio $array = [qw (1 2 6 7 2 9 1 2 6)]; #Step1: matrice di esempio
mio $new_array = []; #
remove_duplicates ($array, $new_array);
Stampare "@$array \n"; #Step 2. Stampa iniziale matrice
Stampare "@$new_array \n"; stampa matrice finale n.
uscita;
Consigli & Avvertenze
- Subroutine "remove_duplicates" possono essere facilmente incorporati in qualsiasi programma di Perl.