in reply to how to find combine common elements of an array?
Basically you're trying to merge all sets with related values.
Well, the below logic isn't pretty, but it works. Not sure what the problem was with your code
Outputs#!/usr/bin/perl -w use strict; use warnings; my @array = map {[split / /]} ( "11 12", "11 13", "9 8 7", "3 4", "11 4" ); my %index = (); for my $i (0..$#array) { for my $val (@{$array[$i]}) { push @{$index{$val}}, $i; } } for my $i (0..$#array) { my $arr = $array[$i] or next; $array[$i] = undef; my %values = (); for my $val (@$arr) { next if $values{$val}++; for my $ind (@{$index{$val}}) { my $related = $array[$ind] or next; $array[$ind] = undef; push @$arr, @$related; } } print join(' ', sort {$a <=> $b} keys %values), "\n"; }
3 4 11 12 13 7 8 9
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: how to find combine common elements of an array?
by wind (Priest) on Apr 26, 2011 at 02:13 UTC |