in reply to Re^3: min and max in a hash of hash
in thread min and max in a hash of hash

I believe he was interested in both the year and month as am I. I currently have the same issue. I have the same data structure using a hash of hash. I would like to report for each year, the month and value of the min and max value. How can your existing example be modified to accommodate this?

Replies are listed 'Best First'.
Re^5: min and max in a hash of hash
by AppleFritter (Vicar) on Jul 17, 2014 at 20:47 UTC

    Here's an example of how to accomplish this:

    use List::Util qw/min max/; my %results = map { my $year_ref = $data{$_}; my $min = min values %$year_ref; my $max = max values %$year_ref; my @min_months = grep { $year_ref->{$_} == $min } keys %$year_ref; my @max_months = grep { $year_ref->{$_} == $max } keys %$year_ref; $_ => { "min" => $min, "max" => $max, "min_months" => \@min_months, "max_months" => \@max_months } } keys %data;

    Note that this takes into account the possibility of there being several months that each have the minimum/maximum value; if your data for each year/month is guaranteed to be distinct, you could drop that and replace \@min_months with $min_months[0] and \@max_months with $max_months[0], respectively.

    There may well be a more concise way of doing this, too, but neither List::Util nor List::MoreUtils appears to contain versions of min and max that operate on key/value pairs (pairmin and pairmax? Now there'd be a worthwhile addition to these modules.)