Remove repetitions in Array

oleber's Avatar author of Remove repetitions in Array
This is an article on Remove repetitions in Array in Perl.
Rated 5.00 By 1 users
The normal idea is to have an hash table, iterate over the array and using the elements as keys.

Something like :
Code: PERL
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: PERL
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: PERL
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: =PERL
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.
0
pradeep's Avatar, Join Date: Apr 2005
Team Leader
That's really cool!
0
oleber's Avatar, Join Date: Apr 2007
Go4Expert Member
This post has become a Recipe at my new Perl website.

http://sites.google.com/site/oleberp...n-free-array-1
0
msmani_1980's Avatar, Join Date: Nov 2009
Newbie Member
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
0
oleber's Avatar, Join Date: Apr 2007
Go4Expert Member
So, What did you add to the subject msmani_1980?
0
PradeepKr's Avatar
Go4Expert Member
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?
0
pradeep's Avatar, Join Date: Apr 2005
Team Leader
"@", prepended to hashname means we are accessing a hash slice i.e. a group of elements instead of one element a time.