Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Re: Re: Removing Duplicate Array Elements!!!

by gbarr (Monk)
on Sep 27, 2001 at 19:45 UTC ( [id://115125]=note: print w/replies, xml ) Need Help??


in reply to Re: Re: Removing Duplicate Array Elements!!!
in thread Removing Duplicate Array Elements!!!

If you are looking an efficient method to do this then try.

my %hash;
@hash{@a} = ();
@a = keys %hash;

But that only works, just as your example, for non-references as the keys of a hash can only be strings. If @a may contain references that you want to preserve then use

my %hash;
@hash{@a} = @a;
@a = values %hash;

This is slightly less efficient as it causes an extra copy of each element in @a

I generally write this as

@a = do { my %h; @h{@a} = @a; values %h }; # unique

Replies are listed 'Best First'.
Re: Re: Re: Re: Removing Duplicate Array Elements!!!
by tachyon (Chancellor) on Sep 27, 2001 at 20:36 UTC

    As you say, the slice method is faster again. I will be using it from now on. Thanks.

    use Benchmark; @a= (0..100,0..100); $mine = <<'CODE'; my %hash; @hash{$_}++ for @a; @a = keys %hash; CODE $yours1 = <<'CODE'; my %hash; @hash{@a} = (); @a = keys %hash; CODE $yours2 = <<'CODE'; my %hash; @hash{@a} = @a; @a = values %hash; CODE $his = <<'CODE'; my %hash; map { $hash{$_}=1 } @a; @a = keys %hash; CODE timethese ( 10000, { 'mine' => $mine, 'yours1' => $yours1, 'yours2' => $yours2, 'his' => $his } ); __END__ C:\>perl test.pl Benchmark: timing 10000 iterations of his, mine, yours1, yours2... his: 17 wallclock secs (17.03 usr + 0.00 sys = 17.03 CPU) @ 58 +7.20/s (n=10000) mine: 15 wallclock secs (15.05 usr + 0.00 sys = 15.05 CPU) @ 66 +4.45/s (n=10000) yours1: 12 wallclock secs (11.76 usr + 0.00 sys = 11.76 CPU) @ 85 +0.34/s (n=10000) yours2: 15 wallclock secs (14.78 usr + 0.00 sys = 14.78 CPU) @ 67 +6.59/s (n=10000) C:\>

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Re^4: Removing Duplicate Array Elements!!!
by littlemonk (Sexton) on Feb 03, 2011 at 10:22 UTC
    Hi thank u so much for your code ..it is working it has solved my problem ..but as a beginner i want know wats happening there ..could plz explain me the code..thanks in advance.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://115125]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others having a coffee break in the Monastery: (4)
As of 2025-07-11 12:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.