in reply to Combining arrays with grep/unless?
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);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Combining arrays with grep/unless?
by polettix (Vicar) on Feb 10, 2007 at 00:13 UTC | |
by ikegami (Patriarch) on Feb 10, 2007 at 00:30 UTC | |
by polettix (Vicar) on Feb 10, 2007 at 01:06 UTC | |
by ikegami (Patriarch) on Feb 10, 2007 at 07:18 UTC | |
by polettix (Vicar) on Feb 11, 2007 at 15:38 UTC |