in reply to Sorting HOH

Updated Code mistake cuted... (my first update :) ) If you need only top values it's one more option:
$data{1} = {'a' => 10, 'b' => 5, 'c' => 20 }; $data{2} = {'a' => 90, 'b' => 15, 'c' => 40 }; @Top = sort { $a <=> $b } map { # cut values %{$data{$_}} } keys %data; @Top[0..2]; # or simplify to ( sort { $a <=> $b } map { # cut values %{$data{$_}} } keys %data; )[0..2];

--
Marco Antonio
Rio-PM

Replies are listed 'Best First'.
Re^2: Sorting HOH
by Roy Johnson (Monsignor) on May 02, 2005 at 17:25 UTC
    Why are you doing two sorts or looking at keys? All you work with is the values of the values:
    my @Top = sort { $a <=> $b } map { values %{$_} } values %data;

    Caution: Contents may have been coded under pressure.
      Thanks. But I need the key values too. Anyways , got the solution.

      Thanks again,
      Swaroop
        You need keys levels 1 and 2 and value correct ?

        Try a Schwarzian transform based code:

        use strict; use Data::Dumper; my %data; #-- original sample $data{1} = {'a' => 10, 'b' => 5, 'c' => 20 }; $data{2} = {'a' => 90, 'b' => 15, 'c' => 40 }; #-- my @Top = sort { $a->[2] <=> $b->[2] } map { my $h = $_; map { [ $h, $_, $data{$h}->{$_} ] } keys %{$data{$h}}; } keys %data; print Dumper(\@Top);
        After it you receive an array with ( Key1, Key2, Value ).

        On Schuartzian transformation you receive the original data format sorted, but you don't need it here.

        --
        Marco Antonio
        Rio-PM