ow, O(N2) time!
If the items in @group1 and @group2 are strings or can be represented by an id, it can be done in O(N) time.
my %seen; my @all = grep !$seen{$_}++, @group1, @group2;
Update:
If the items in @group1 and @group2 can be compared, it can be done in O(N log2 N) time (although order is lost).
my @all; my @group1_s = sort compare_func @group1; my @group2_s = sort compare_func @group2; while (@group1_s && @group2_s) { my $cmp = compare_func($group1_s[0], $group2_s[0]); if ($cmp < 0) { push(@all, shift(@group1_s)); } elsif ($cmp > 0) { push(@all, shift(@group2_s)); } else { push(@all, scalar(shift(@group1_s), shift(@group +2_s))); } } push(@all, @group1_s, @group2_s);
In reply to Re: Combining arrays with grep/unless?
by ikegami
in thread Combining arrays with grep/unless?
by mdunnbass
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |