Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: highest value in hash

by Athanasius (Archbishop)
on Mar 31, 2013 at 02:44 UTC ( #1026319=note: print w/replies, xml ) Need Help??

in reply to highest value in hash

Hello maciej, and welcome to the Monastery!

Expanding on the advice from Anonymous Monk, here is one way to implement the solution:

#! perl use warnings; use strict; my %hash = (1 => 8, 2 => 6, 3 => 3, 4 => 7); my $highest_value; my $highest_key; while (my ($key, $value) = each %hash) { print "$key key has value $value\n"; if (!defined $highest_value || $highest_value < $value) { $highest_key = $key; $highest_value = $value; } } print "The element with key $highest_key " . "has the highest value $highest_value\n" if defined $highest_key +;


12:36 >perl 4 key has value 7 1 key has value 8 3 key has value 3 2 key has value 6 The element with key 1 has the highest value 8 12:38 >

Note that this uses < to compare values numerically. To compare the values as strings, you would need to use lt instead:

if (!defined $highest_value || $highest_value lt $value)

Hope that helps,

Update: ++Anonymous Monk for the syntax below: it’s both simpler and more efficient. Confession: I had to re-read the documentation for each to verify that it Does the Right Thing here (it does). :-)

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: highest value in hash (defined)
by Anonymous Monk on Mar 31, 2013 at 04:12 UTC
    Just say no to defined :)
    ... my( $highest_value, $highest_key ) = each %hash; while (my ($key, $value) = each %hash) ...

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1026319]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (4)
As of 2022-08-11 11:19 GMT
Find Nodes?
    Voting Booth?

    No recent polls found