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

Re^6: Unique array w/o repeated elements and still keep the original order!

by jynx (Priest)
on Aug 09, 2002 at 21:17 UTC ( #189051=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: Re: Re: Re: Unique array w/o repeated elements and still keep the original order!
in thread Unique array w/o repeated elements and still keep the original order!


And when i write something like that i usually change it to something like:

my %seen; my @unique = grep {not $seen{$_}++} <FILE>; chomp @unique;
Or something similar. It might not be the best way to do it, but it has one advantage...

It has nothing to do with using %_. It's mostly because i'm very wary of changing $_ in map, especially since i recently got very burned by attempting such a thing...

jynx

update: at prompting, i'll mention that one could write that as:

my (%seen, @unique); chomp( @unique = grep {not $seen{$_}++} <FILE> );
however, i think that would iterate twice as well. Then again there's that point about premature optimization... ;-)

Update 2: after doing a benchmark, i've found that the map solution is the fastest, followed by the one-line chomp and last is the two-liner. The one-liner is sufficiently fast enough that i would still prefer it, although for readability and maintainability i might still go with the two line version. To each their own...

Thanks demerphq for the learning experience... :-)


Comment on Re^6: Unique array w/o repeated elements and still keep the original order!
Select or Download Code
Replies are listed 'Best First'.
Re: Re^6: Unique array w/o repeated elements and still keep the original order!
by demerphq (Chancellor) on Aug 09, 2002 at 21:28 UTC
    Heh, its to avoid the code you posted (and the implicit overhead of going through the list twice) that makes me use map{} instead.

    I assume you somehow tried to change the value of constants or something like that?

    BTW, i know the above could be represented as premature optimization, but the idea of iterating over a list twice for no good reason makes me unhappy.

    :-)

    Yves / DeMerphq
    ---
    Software Engineering is Programming when you can't. -- E. W. Dijkstra (RIP)

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (11)
As of 2015-07-29 08:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (262 votes), past polls