in reply to How to get the Max values' key!
#!/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 | |
|
Re^2: How to get the Max values' key!
by pysome (Scribe) on Aug 13, 2007 at 13:24 UTC |