http://www.perlmonks.org?node_id=1017269


in reply to How to make buckets of like data

Am I missing something simple here?

I don't believe you can do it in one pass. This works, but might be simplified?:

#! perl -slw use strict; use Data::Dump qw[ pp ]; my @array = (['A','B'],['C','D'],['A','C'],['E','F'],['F','G']); my %h; for( @array ) { my( $x, $y ) = @$_; $h{ $x }{ $y } = 1; $h{ $y }{ $x } = 1; } OUTER: for my $x ( reverse sort keys %h ) { for my $y ( reverse sort keys %h ) { next if $x eq $y; if( exists $h{ $y }{ $x } ) { $h{ $y }{ $_ } = 1 for keys %{ $h{ $x } }; delete $h{ $x }; next OUTER; } } } my @buckets = map[ sort keys %{ $h{ $_ } } ], keys %h; pp \@buckets; __END__ C:\test>1017261 [["A", "B", "C", "D"], ["E", "F", "G"]]

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.