Perl og mange andre programmeringssprog bruger arrays til at gemme en liste over data. Men Perl understøtter også en specifik datastruktur kaldet en hash . En Perl hash knytter en bestemt værdi med en nøgle. Et eksempel er hash { Jan = > 31 April = > 30 } , hvor en måned er en nøgle og et antal dage er en værdi . En Perl hash gør det muligt at udvikle en enkel algoritme til at fjerne dubletter fra et array. Den tilsvarende subrutine har mindre end ti kommandoer i Perl. Instruktioner
Oprettelse en subrutine " Remove_duplicates ," en algoritme
1
Anskaf array- data, og erklære en hash " poster ". En anden matrix kaldet " new_array " vil indeholde ikke- duplikerede data. Trin 1 til 5 er illustreret med Perl-kode er angivet i afsnit 2 , trin 3 .
2
Tildel alle array- elementer som hash nøgler og tildele hash værdier lig med 1 for alle nøgler.
3
Loop gennem alle elementer i array og kontrollere hashværdi knyttet til dette element.
4 p Hvis den hash-værdi er 1 ( se trin 3 ), så element er originalt eller ej duplikeret og bør føjes til " new_array ". På samme tid, dette element er markeret , dvs hash-værdi ændres til 0
5 p Hvis den hash-værdi er 0, så dette element allerede er stødt på , dvs. Det er duplikeret og sprunget < . br >
eksempel og Perl Program
6
Fjern dubletter fra array med elementer (1 2 6 7 2 9 1 2 6) .
7 < p > Print indledende og afsluttende arrays (uden dubletter )
8
# afsnit 1 # Subroutine Begins
sub remove_duplicates { my ( $ array, $ new_array ) = @ _ ; . # Step 1. . Læs indledende arraymy % indgange = (); # Trin 1 . Erklær hash
foreach ( @ $ array) { næste , hvis der findes $ indgange { $ _ }; $ poster { $ _ } = 1; # Trin 2 }
foreach ( @ $ matrix ) { # Trin 3 . Loop gennem alle matrix elementsif ( $ indgange { $ _ } ) { # Trin 5 . Elementet er sprunget Hvis hashværdi 0.push @ $ new_array , $ _ ; # Trin 4 . Tilføj et element til den nye matrix , hvis hashværdi 1 $ indgange { $ _ } = 0; # Trin 4 . Elementet er markeret , dvs ændre hash værdien til 0 . }
}}
# Subroutine Slutter
# Afsnit 2my $ matrix = [ qw (1 2 6 7 2 9 1 2 6 )], # Trin 1: et eksempel arraymy $ new_array = [] # remove_duplicates ($ array, $ new_array ), print " @ $ array- \\ n"; # Trin 2 . Udskrivning indledende arrayprint " @ $ new_array \\ n"; # udskriver den endelige arrayexit ,