T
The Poor
Here is my new code changed from the old code in FAQ.
Please add it to the perldoc for the next release of perl.
OLD:
+
How do I compute the difference of two arrays? How do I compute the
intersection of two arrays?
Use a hash. Here's code to do both and more. It assumes that each
element is unique in a given array:
@union = @Intersection = @difference = ();
%count = ();
foreach $element (@array1, @array2) { $count{$element}++ }
foreach $element (keys %count) {
push @union, $element;
push @{ $count{$element} > 1 ? \@intersection :
\@difference }, $element;
}
Note that this is the *symmetric difference*, that is, all
elements in
either A or in B but not in both. Think of it as an xor operation.
-
New:
+
How do I compute the difference of two arrays? How do I compute the
intersection of two arrays?
Use a hash. Here's code to do both and more. It assumes that each
element is unique in a given array:
@union = @Intersection = @in1notin2 = @in2notin1();
%count = ();
foreach $element (@array1) { $count{$element}++ }
foreach $element (@array2) { $count{$element}-- }
foreach $element (keys %count) {
push @union, $element;
push (@Intersection, $element) if $count{$element} == 0;
push (@in1notin2, $element) if $count{$element} == 1;
push (@in2notin1, $element) if $count{$element} == -1;
}
-
2 Questions:
how to fix it when the array is not uniqu?
how to simplfy the last 3 lines using case, ?: or something else?
push @Intersection, $element if $count{$element} == 0;
push @in1notin2, $element if $count{$element} == 1;
push @in2notin1, $element if $count{$element} == -1;
http://edealseek.com
Please add it to the perldoc for the next release of perl.
OLD:
+
How do I compute the difference of two arrays? How do I compute the
intersection of two arrays?
Use a hash. Here's code to do both and more. It assumes that each
element is unique in a given array:
@union = @Intersection = @difference = ();
%count = ();
foreach $element (@array1, @array2) { $count{$element}++ }
foreach $element (keys %count) {
push @union, $element;
push @{ $count{$element} > 1 ? \@intersection :
\@difference }, $element;
}
Note that this is the *symmetric difference*, that is, all
elements in
either A or in B but not in both. Think of it as an xor operation.
-
New:
+
How do I compute the difference of two arrays? How do I compute the
intersection of two arrays?
Use a hash. Here's code to do both and more. It assumes that each
element is unique in a given array:
@union = @Intersection = @in1notin2 = @in2notin1();
%count = ();
foreach $element (@array1) { $count{$element}++ }
foreach $element (@array2) { $count{$element}-- }
foreach $element (keys %count) {
push @union, $element;
push (@Intersection, $element) if $count{$element} == 0;
push (@in1notin2, $element) if $count{$element} == 1;
push (@in2notin1, $element) if $count{$element} == -1;
}
-
2 Questions:
how to fix it when the array is not uniqu?
how to simplfy the last 3 lines using case, ?: or something else?
push @Intersection, $element if $count{$element} == 0;
push @in1notin2, $element if $count{$element} == 1;
push @in2notin1, $element if $count{$element} == -1;
http://edealseek.com