in reply to Re: Using hashes for set operations...
in thread Using hashes for set operations...
I was sure that using De Morgan's laws would just relocate the problem and not solve it. (you're now only deleting hash-slices)
But this relocation makes sense ... now it works for all cases where "undef" isn't allowed as part of an initial set. (undef deletes empty strings).
But you shouldn't use print to inspect data structures:
#!/usr/bin/env perl use strict; use warnings; use Data::Dump qw(pp); my @array1=(1..2,""); my @array2=(2..3,undef); my (%union, %sdiff, %sd1, %sd2, %inter); @union{(@array1,@array2)} = (@array1,@array2); %sd1 = %sd2 = %inter = %union; delete @sd1{@array2}; delete @sd2{@array1}; %sdiff = (%sd1,%sd2); delete @inter{keys %sdiff}; print "array1: ", pp(\@array1), "\n"; print "array2: ", pp(\@array2), "\n"; print "union: ", pp(\%union), "\n"; print "sdiff: ", pp(\%sdiff), "\n"; print "inter: ", pp(\%inter), "\n"; print "sd1: ", pp(\%sd1), "\n"; print "sd2: ", pp(\%sd2), "\n";
prints
Use of uninitialized value $array2[2] in hash slice at /home/lanx/B/PL +/PM/set2.pl line 12. Use of uninitialized value $array2[2] in delete at /home/lanx/B/PL/PM/ +set2.pl line 16. array1: [1, 2, ""] array2: [2, 3, undef] union: { "" => undef, 1 => 1, 2 => 2, 3 => 3 } sdiff: { 1 => 1, 3 => 3 } inter: { "" => undef, 2 => 2 } sd1: { 1 => 1 } sd2: { 3 => 3 }
But while you found a mathematical solution, needing so many operations for an intersection is in practice a little disappointing ...
Thanks anyway! :)
Cheers Rolf
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Using hashes for set operations...
by jaredor (Priest) on May 24, 2011 at 12:55 UTC | |
by LanX (Saint) on May 24, 2011 at 14:09 UTC | |
by jaredor (Priest) on May 26, 2011 at 03:39 UTC | |
by LanX (Saint) on May 27, 2011 at 15:44 UTC | |
by jaredor (Priest) on May 27, 2011 at 18:04 UTC | |
|