Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris

Re: Using map to create a hash/bag from an array

by GrandFather (Sage)
on Dec 17, 2005 at 11:21 UTC ( #517467=note: print w/replies, xml ) Need Help??

in reply to Using map to create a hash/bag from an array

Benchmarks are interesting:

use strict; use warnings; use Set::Scalar; use Benchmark qw(cmpthese); 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 x y z); cmpthese (-1, { 'GF' => sub {my %hash; @hash{@array} = (1) x @array;}, 'map' => sub {my %hash = map {($_, 1)} @array;}, 'map++' => sub {my %hash; map {$hash{$_}++} @array;}, 'set' => sub {my $set = Set::Scalar->new(@array);}, } );


Rate set map map++ GF set 2203/s -- -84% -91% -92% map 13740/s 524% -- -46% -49% map++ 25598/s 1062% 86% -- -6% GF 27113/s 1131% 97% 6% --

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: Using map to create a hash/bag from an array
by shotgunefx (Parson) on Dec 18, 2005 at 08:34 UTC
    Didn't they optimize map at some point so it doesn't actually creat a new array when in a null context? That would explain why map++ is so much faster than map.


    perl digital dash (in progress)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://517467]
[thao4]: thao4
[hippo]: Indeed you are.
[thao4]: Hi all, I am new in perl. I need do somthing in perl: exemple: - search a patern "CADRE 1.1 CPU" in one file.txt - incremente +30 lines from the line with the patern found - replace the patern "Model Regle" by "Heath Rule A" in this new line (30 line
[marto]: good morning all
[hippo]: Welcome. Tell me, have you read perlintro? That's a great place to start.
[thao4]: I seach to do that since a week but I can't found the answer in google. Thank for your help

How do I use this? | Other CB clients
Other Users?
Others pondering the Monastery: (10)
As of 2018-02-21 09:42 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (276 votes). Check out past polls.