Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^3: Comparing Hash key with array

by Riales (Hermit)
on Feb 02, 2012 at 17:32 UTC ( #951501=note: print w/ replies, xml ) Need Help??


in reply to Re^2: Comparing Hash key with array
in thread Comparing Hash key with array

This should work:

use Data::Dumper; my @lines = ( ['_W9C2JJDCB', 'asdf1', 'zxcv1', ], ['_W9C2JJDCB', 'asdf2', 'zxcv2', ], ['_W9C2JJDCB', 'asdf3', 'zxcv3', ], ); my %hash = ( '_W9C2JJDCB' => [ '_W92CJJDCB', '201200240', 'TEST: IGNORE', 'John Doe', 'Closed', 'HIP', 'email@email.com', 'email2@email.com', ], ); foreach my $key (keys %hash) { foreach my $line (@lines) { if ($line->[0] eq $key) { shift @$line; push @{$hash{$key}}, @$line; } } } die Dumper(%hash);

I don't know what your input data looks like, but may I suggest iterating through @lines instead of keys %hash in the outer loop? This way, you can use the hash's look-up to check if there's a match. Your way is better if there's a massive amount of data in @lines that doesn't have a match in %hash though. Let me know if you'd like some help with the other way!

EDIT: I TAKE BACK WHAT I SAID

You should definitely iterate through @lines first no matter what; it's far more efficient:

foreach my $line (@lines) { my $key = shift @$line; if (exists($hash{$key})) { push @{$hash{$key}}, @$line; } }


Comment on Re^3: Comparing Hash key with array
Select or Download Code
Re^4: Comparing Hash key with array
by packetstormer (Monk) on Feb 02, 2012 at 17:43 UTC

    Excellent! Thanks, that works as I want.
    It turns out my original code, albeit verbose, almost works when I change that "==" to "eq". One of those things were you can't see the wood for the trees!

    Thanks for the tip regarding iterating through @lines. There will be an huge amount of data in there when it goes live.

    Thanks again

      Glad that worked for you! I just wanted to make sure you saw my edit--your code will run far faster if you iterate through @lines first.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://951501]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (8)
As of 2015-07-05 10:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (61 votes), past polls