in reply to How to get the Max values' key!

Here's a one-liner that capitalizes on citromatik's sort method above:

#!/usr/bin/perl use strict; my %r; $r{123}{a}=3; $r{123}{b}=2; $r{456}{c}=5; $r{456}{d}=7; map { print "\$r{$_->[0]}{$_->[1]} ==> $r{$_->[0]}{$_->[1]}\n" } map { [$_,(sort { $r{$_}->{$b} <=> $r{$_}->{$a} } keys %{$r{$_}})[0]]} keys %r;

Prints:

$r{456}{d} ==> 7 $r{123}{a} ==> 3

UPDATE: Upon reading the question a second time, I decided that it would perhaps be more useful to maintain a hash that remembers the max valued second key for each first key, as below. The print line is just for show, since you can do anything with the hash once it is created.

my %rmax; $rmax{$_} = (sort { $r{$_}->{$b} <=> $r{$_}->{$a} } keys %{$r{$_}})[0] for keys %r; print "\$r{$_}{$rmax{$_}} ==> $r{$_}{$rmax{$_}}\n" for keys %rmax;

Prints:

$r{123}{a} ==> 3 $r{456}{d} ==> 7

Replies are listed 'Best First'.
Re^2: How to get the Max values' key!
by one4k4 (Hermit) on Aug 13, 2007 at 13:12 UTC
    I was hoping someone would use map. It's almost perfectly built for this function.
Re^2: How to get the Max values' key!
by pysome (Scribe) on Aug 13, 2007 at 13:24 UTC
    yeah. I wanna deal with the created hash :) Thanks