Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re: intersecting two hashes

by Athanasius (Archbishop)
on Jan 26, 2016 at 07:56 UTC ( [id://1153649]=note: print w/replies, xml ) Need Help??


in reply to intersecting two hashes

Hello bsherkhane,

As Anonymous Monk says, if this is a database question, then hashes aren’t needed.

However, if you do have two hashes and want to find their intersection, just remember that the keys of a hash are accessible as a list via the Perl built-in keys function. So you really want the intersection of two lists, and this is an FAQ: see perlfaq4#How-do-I-compute-the-difference-of-two-arrays?-How-do-I-compute-the-intersection-of-two-arrays?

Update: The logic is actually simpler with hashes: because each key can occur only once in a given hash, you only need to determine whether an entry corresponding to each key in the first hash exists in the second:

use strict; use warnings; use Data::Dump; my %hash1 = ( a => 1, b => 2, c => 3, ); my %hash2 = ( b => 4, e => 5, f => 6, c => 7, ); my %intersection; for my $key (keys %hash1) { $intersection{$key} = [ $hash1{$key}, $hash2{$key} ] if exists $hash2{$key}; } dd \%intersection;

Output:

18:00 >perl 1527_SoPW.pl { b => [2, 4], c => [3, 7] } 18:01 >

(Of course, you’ll have to decide what to do when the values differ. I’ve just included both values in an anonymous array.)

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: intersecting two hashes
by RichardK (Parson) on Jan 26, 2016 at 08:51 UTC

    Alternatively, you could find just the keys shared by both hashes using grep

    use v5.22; use warnings; my %hash1 = ( a => 1, b => 2, c => 3, ); my %hash2 = ( b => 4, e => 5, f => 6, c => 7, ); my @results = grep { exists $hash2{$_} } keys %hash1; say join ',',@results; #b,c

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (2)
As of 2024-04-26 00:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found