Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: Get All Duplicated Elements in an Array (Once, without shifting)

by John M. Dlugosz (Monsignor)
on Oct 14, 2002 at 19:47 UTC ( #205192=note: print w/replies, xml ) Need Help??

in reply to Get All Duplicated Elements in an Array (Once, without shifting)

You could refine that to have an out list rather than an out hash. Every value you store in it has the value 1!

my %multiples; my @out; for (@in) { if ($multiples{$_} == 1) { push @out, $_; } $multiples{$_} = 1; } print "@out";
Now since it contains only one statement, you could write the if in suffix form. You could use ++ instead of setting the count to 1 in the unconditional statement.

That gets down to:

my %multiples; my @out; for (@in) { push @out, $_ if ($multiples{$_}++ == 1) } print "@out";
That's tight enough that you can see how merlyn's form works. Just use the built-in looping mechanism of grep instead of your own foreach loop/push. It's the same thing.

He used pre-increment == 2, which you'll note is the same thing as post-increment == 1. The latter is more directly equivilent to what you had originally, but the pre-increment is arguably more efficient (though I don't know if measurably faster in Perl).

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (3)
As of 2022-05-28 20:50 GMT
Find Nodes?
    Voting Booth?
    Do you prefer to work remotely?

    Results (101 votes). Check out past polls.