The running time of this is N+M, ie the number of elements in both arrays summed together.my %hash; @hash{@arr2}=(1) x @arr2; my @cleaned=grep !$hash{$_},@arr1;
Here is the relevant FAQ (in fact it explains how to do array union, intersection, and difference, the above only does the difference.)
E:\Bin>perldoc -q "difference of two arrays" Found in E:\Perl\lib\pod\perlfaq4.pod 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 th +at 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.
HTH
--- demerphq
The trick is to use Perls strengths, not its weaknesses -- Larry Wall
In reply to Re: How to splice out multiple entries from an array
by demerphq
in thread How to splice out multiple entries from an array
by Ya
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |