Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: to select unique characters

by johngg (Canon)
on Feb 13, 2008 at 10:42 UTC ( #667752=note: print w/replies, xml ) Need Help??


in reply to to select unique characters

The common idiom seems to be

my %seen; my @uniq = grep { ! $seen{$_} ++ } @arr;

but using a hash slice seems to be a bit faster. I should warn that I have a chequered history with benchmarks so take this with a pinch of salt.

use strict; use warnings; use Benchmark q{cmpthese}; my @arr = ( q{a} .. q{z} ) x 1000; cmpthese( -10, { useGrep => sub { my %seen; return grep { ! $seen{$_} ++ } @arr; }, useSlice => sub { my %seen; @seen{@arr} = (); return keys %seen; }, });

The output.

Rate useGrep useSlice useGrep 13.0/s -- -63% useSlice 35.2/s 172% --

If you need to preserve the order of the array then you should use the grep method.

I hope this is of interest.

Cheers,

JohnGG

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2021-02-27 16:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?