in reply to Re^2: promoting array to a hash
in thread promoting array to a hash
very important update: Please see Re^4: promoting array to a hash by BrowserUk for why the following code is horrifically wrong. Of course, that said, it requires one very simple s!my!our! to correct.
I know that the map vs. slice benchmark has been done before, but just to do it again as a reminder :)
#!perl -w use strict; use Benchmark ':all'; my @unsorted = map { join('', map { ('a'..'z','A'..'Z',0..9)[rand 62] } 1..50) } 1..5000; sub uniq_dragonchild { my %x; @x{@_} = @_; values %x } sub uniq_BrowserUk { my %x; @x{@_} = (); keys %x } sub uniq_Zaxo { keys %{ { map { $_ => undef } @_ } } } cmpthese( timethese(-60, { uniq_dragonchild => 'my @x = uniq_dragonchild(@unsorted)', uniq_BrowserUk => 'my @x = uniq_BrowserUk(@unsorted)', uniq_Zaxo => 'my @x = uniq_Zaxo(@unsorted)' } ) ); __END__ C:\>uniq.pl Benchmark: running uniq_BrowserUk, uniq_Zaxo, uniq_dragonchild for at +least 60 C PU seconds... uniq_BrowserUk: 64 wallclock secs (63.19 usr + 0.02 sys = 63.20 CPU) +@ 421025.4 1/s (n=26610069) uniq_Zaxo: 59 wallclock secs (60.08 usr + 0.03 sys = 60.11 CPU) @ 18 +6939.31/s (n=11237109) uniq_dragonchild: 64 wallclock secs (63.05 usr + 0.02 sys = 63.06 CPU +) @ 399674 .64/s (n=25204682) Rate uniq_Zaxo uniq_dragonchild uniq_Bro +wserUk uniq_Zaxo 186939/s -- -53% + -56% uniq_dragonchild 399675/s 114% -- + -5% uniq_BrowserUk 421025/s 125% 5% + --
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: promoting array to a hash
by Roy Johnson (Monsignor) on Jun 13, 2004 at 13:58 UTC | |
by dragonchild (Archbishop) on Jun 14, 2004 at 01:35 UTC | |
by BrowserUk (Patriarch) on Jun 14, 2004 at 12:02 UTC | |
|
Re^4: promoting array to a hash
by BrowserUk (Patriarch) on Jun 14, 2004 at 11:59 UTC | |
by saskaqueer (Friar) on Jun 15, 2004 at 05:30 UTC |