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 |