There has to be a better way using array slices...... got it
Here is an example for union:
%s1=('a'=>1, 'b'=>1, 'c'=>1);
%s2=('a'=>1, 'c'=>1, 'd'=>1);
print "Set 1 has: ", join(",",keys %s1), " Set 2 has: ", join(",", k
+eys %s2),"\n";
%j=%s1;
@j{keys %s2}=1;
print "Union is ", join(",", keys %j), "\n";
I don't really know how to remove elements from the
hash.
In the above example, the hash keys are the elements
of the set. If you let the set be the elements in the
hash that also have a nonzero value, then the same
technique can be used for intersection:
%inter=%s1;
@inter{%s2}=0;
Also, to answer the original poster: if "REALLY large"
is really large, and doesnt fit in the main memory
then you might want to store the sets in sorted
files and merge them smartly to compute the union/intersection. |