http://qs321.pair.com?node_id=11016


in reply to RE: Re: Array to Hash
in thread Array to Hash

While we're on the topic of benchmarking, I'd just like to, for the hell of it, add the worst possible answer to this question:
map { $code .= "\$hash{$_} = 1;\n" } @array; eval "$code";
And now for a little program, borrowed from httptech:
use Benchmark; my @array = qw(a b c d e f g h i j k l m n o p q r s t u v w z y z); my %hash; timethese(10000, { 'btrott' => sub { @hash{@array} = (1) x @array; }, 'plaid' => sub { my $code map { $code .= "\$hash{$_} = 1;\n" } @array; eval "$code"; } });
Outputs
Benchmark: timing 10000 iterations of btrott, plaid... btrott: 1 wallclock secs ( 0.56 usr + 0.00 sys = 0.56 CPU) plaid: 23 wallclock secs (22.07 usr + 0.06 sys = 22.13 CPU)
Don't know why i threw this in. Guess I just didn't want to waste the effort:)

Replies are listed 'Best First'.
RE: RE: RE: Re: Array to Hash
by Danimal (Novice) on May 12, 2000 at 20:13 UTC
    ...and my old friend 'grep' Not quite as fast as btrott but still a decent contender. use Benchmark; my @array = qw(a b c d e f g h i j k l m n o p q r s t u v w z y z); my %hash; timethese( 500000, { 'btrott' => sub { @hash{@array} = (1) x @array; }, 'httptech' => sub { for (@array) { $hash{$_} = 1 } }, 'danimal' => sub { grep { $hash{$_}++ } @array; } }, ); Benchmark: timing 500000 iterations of btrott, danimal, httptech... btrott: 21 wallclock secs (21.38 usr + 0.00 sys = 21.38 CPU) danimal: 22 wallclock secs (22.57 usr + 0.00 sys = 22.57 CPU) httptech: 34 wallclock secs (34.10 usr + 0.00 sys = 34.10 CPU)