[Omaha.pm] map: make a hash from an array

Miller, Scott L (Omaha Networks) Scott.L.Miller at hp.com
Thu Sep 15 09:02:32 PDT 2005


Just make sure you benchmark your resulting code.  Building the hash
from an array is fairly expensive in itself...  

Is it possible that building the hash in the first place, rather than an
array is the more correct thing to do?

-Scott

-----Original Message-----
From: omaha-pm-bounces at pm.org [mailto:omaha-pm-bounces at pm.org] On Behalf
Of Jay Hannah
Sent: Thursday, September 15, 2005 6:41 AM
To: Perl Mongers of Omaha, Nebraska USA
Subject: Re: [Omaha.pm] map: make a hash from an array

On Sep 14, 2005, at 1:55 PM, Andy Lester wrote:
> On Wed, Sep 14, 2005 at 09:46:28AM -0500, Jay Hannah 
> (jhannah at omnihotels.com) wrote:
>> Here's a faster way:
>>
>> my %keepthese = map { $_, 1 } @keepthese;
>
> If you only care about the existence of a given element, and don't
care
> if it gets a value, you can assign to a hash slice:
>
>     my %hash;
>     @hash{@keepthese} = ();
>
> If you need them to have a value, you can do this:
>
>     my %hash;
>     @hash{@keepthese} = (1) x @keepthese;

I've never used hash slices... I'll have to do some reading.

> Finally, if you're just checking for existence, and don't really need
> to worry about speed, you can do
>
>     my $exists = grep { $_ eq $searching_for }, @keepthese;

Usually when I'm building a hash from an array I'm doing it for the 
sake of speed. My theory is that when I have unique keys building and 
then performing multiple lookups against a large hash is faster than 
performing multiple greps against a large array.

I use grep when I'm only doing 1 or 2 lookups against an array. My 
theory there being that its more efficient to do that than to build a 
hash that's only going to be used once.

(You need to remove the "," from your grep statement, btw. It's a 
syntax error.)

Thanks!

j

_______________________________________________
Omaha-pm mailing list
Omaha-pm at pm.org
http://mail.pm.org/mailman/listinfo/omaha-pm


More information about the Omaha-pm mailing list