The normal idea is to have an hash table, iterate over the array and using the elements as keys. Something like : Code: my @array = (1,5,3,7,9,1,4,5,7,6,7); my %hash; foreach my $element (@array) { $hash{$element}++ } my @arrayNoRep = keys %hash; print join(", ", @arrayNoRep); Lets simplify the loop Code: my @array = (1,5,3,7,9,1,4,5,7,6,7); my %hash; $hash{$_}++ foreach @array; my @arrayNoRep = keys %hash; print join(", ", @arrayNoRep); But do we need the loop? Code: my @array = (1,5,3,7,9,1,4,5,7,6,7); my %hash; @hash{@array} = (); my @arrayNoRep = keys %hash; print join(", ", @arrayNoRep); And throwing away the hash defeniton. Code: my @array = (1,5,3,7,9,1,4,5,7,6,7); my @arrayNoRep = keys %{{map {$_=>0} @array}}; print join(", ", @arrayNoRep); I love this one line in Perl.
This post has become a Recipe at my new Perl website. http://sites.google.com/site/oleber...-arrays/01-getting-a-duplication-free-array-1
Remove repetitions in Array without loop Code: my @array = (1,5,3,7,9,1,4,5,7,6,7); @t{@array}=(); print join sort keys %t,","; Result : 1, 3, 4, 5, 6, 7, 9
I couldn't get this line in the 3rd code block @hash{@array} = (); hash is defined with % in the previous line (%hash) and then it is seen with @ which is meant for array. Can somebody explain me, what exactly "@", prepended to hashname, does?
"@", prepended to hashname means we are accessing a hash slice i.e. a group of elements instead of one element a time.