Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Using List::UtilsBy to print max and min values from a hash of hashes

by choroba (Cardinal)
on Apr 13, 2020 at 16:18 UTC ( [id://11115467]=note: print w/replies, xml ) Need Help??


in reply to Using List::UtilsBy to print max and min values from a hash of hashes

By specifying max_by { $subhash->{$_} }, you're sorting by values, i.e. by the number 1 in the subhashes. That's not what you want. You want to sort directly by $_.

Also, you used max_by even in the second paragraph where you wanted min_by.

After fixing these, it works as you expected:

#! /usr/bin/perl use warnings; use strict; use List::UtilsBy qw{ min_by max_by }; my %counts = ( Adam => { "201708" => 1, "201703" => 1, "201804" => 1, "201603" => 1, "201705" => 1, "201702" => 1, "201608" => 1, "201704" => 1, }, Sam => { "201803" => 1, "201801" => 1 }, ); for my $name ( keys %counts ) { my $subhash = $counts{$name}; my $maximal = max_by { $_ } keys %$subhash; print "$name, $maximal\n"; } for my $name ( keys %counts ) { my $subhash = $counts{$name}; my $minimal = min_by { $_ } keys %$subhash; print "$name, $minimal\n"; }

Update:

I also moved the use statement to the top (as it's executed during the compilation phase, anyway) and replaced foreach with its shorter form.

Note that you might use the minmax_by function, too:

use List::UtilsBy qw{ minmax_by }; for my $name ( keys %counts ) { my $subhash = $counts{$name}; my ($minimal, $maximal) = minmax_by { $_ } keys %$subhash; print "$name, $minimal - $maximal\n"; }

Update 2: But using { $_ } means you can get back to List::Util::min or max, or List::MoreUtils::minmax.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]

Replies are listed 'Best First'.
Re^2: Using List::UtilsBy to print max and min values from a hash of hashes
by Izzy_Murph (Initiate) on Apr 13, 2020 at 16:42 UTC
    Ah, brilliant! Thank you so much for this.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others perusing the Monastery: (6)
As of 2024-04-19 10:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found