Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

Re: HoH problem

by imp (Priest)
on Nov 07, 2006 at 22:21 UTC ( #582744=note: print w/replies, xml ) Need Help??

in reply to HoH problem

In the spirit of TMTOWTDI here's an alternative solution that uses Sort::Key to improve readability.

To further improve the readability (without too much memory being wasted) this version also creates a partially flattened collection of [filename, letter, dataref] chunks. <p. It could be simplified further, but I kept the letter key capturing enabled in case it was neccesary for solving the problem with actual data (versus the example data).

#!/usr/bin/perl use strict; use warnings; use Sort::Key qw(ikeysort); my %hoh; $hoh{'FILENAME1'}{'A'}{'weight'}=3000; $hoh{'FILENAME1'}{'A'}{'intensity'}=2; $hoh{'FILENAME1'}{'B'}{'weight'}=4000; $hoh{'FILENAME1'}{'B'}{'intensity'}=3; $hoh{'FILENAME2'}{'D'}{'weight'}=2000; $hoh{'FILENAME2'}{'D'}{'intensity'}=7; $hoh{'FILENAME2'}{'C'}{'weight'}=5000; $hoh{'FILENAME2'}{'C'}{'intensity'}=3; $hoh{'FILENAME3'}{'C'}{'weight'}=1000; $hoh{'FILENAME3'}{'C'}{'intensity'}=4; $hoh{'FILENAME3'}{'A'}{'weight'}=6000; $hoh{'FILENAME3'}{'A'}{'intensity'}=3; # Create a list of sets # $set[0] = filename # $set[1] = letter # $set[2] = reference to the data for this filename-letter combination my @sets; for my $filename (keys %hoh) { push @sets, [$filename, $_,$hoh{$filename}{$_}] for keys %{$hoh{$f +ilename}} } for my $set (ikeysort { $_->[2]{weight} } @sets) { my ($filename,$letter,$data) = @$set; my $weight = $data->{weight}; my $intensity = $data->{intensity}; printf "weight: %4d intensity: %d Filename: %s\n",$weight,$intensi +ty,$filename; }

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://582744]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (2)
As of 2018-03-24 05:11 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (297 votes). Check out past polls.