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


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

Very cool, btrott. And faster than mine:
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 } }, }); Benchmark: timing 500000 iterations of btrott, httptech... btrott: 14 wallclock secs (14.58 usr + 0.00 sys = 14.58 CPU) httptech: 20 wallclock secs (20.68 usr + 0.01 sys = 20.69 CPU)

Replies are listed 'Best First'.
RE: RE: Re: Array to Hash
by plaid (Chaplain) on May 10, 2000 at 21:25 UTC
    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:)
      ...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)
RE: RE: Re: Array to Hash
by Danimal (Novice) on May 12, 2000 at 20:22 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)