Dirtier maybe, quicker not:
use strict;
use warnings;
use Benchmark qw(cmpthese);
my @XYZ = qw(Mary Mary Mary Mary Joe Joe Joe);
cmpthese
(
-1,
{
'GF' => sub {my %unique; @unique{@XYZ} = (); keys %unique;},
'DW' => sub {keys %{{map {$_=>undef} @XYZ}};},
'RJ' => sub {keys %{(grep \@{$_}{@XYZ}, {})[0]};},
}
);
Benchmark results:
Rate DW RJ GF
DW 71543/s -- -62% -73%
RJ 188025/s 163% -- -28%
GF 260808/s 265% 39% --
Updated to include Roy Johnson's "dirtier" version
Perl is Huffman encoded by design.
|