in reply to Ways to group elements of an AoH
Using an explicit intermediate hash cleans up the code somewhat (for some definition of clean):
use strict; use warnings; use Data::Dump::Streamer; my $allusers = [ {...} ]; # Data per sample my %users; for my $user (@$allusers) { my $name = $user->{user}; $users{$name}{$_} += $user->{$_} for qw(duration amount); } @$allusers = map { {user => $_, duration => $users{$_}{duration}, amount => $users{$_ +}{amount}} } sort keys %users; Dump $allusers;
Prints:
$ARRAY1 = [ { amount => 600, duration => 6, user => 'Michael' }, { amount => 700, duration => 7, user => 'Sarah' }, { amount => 800, duration => 8, user => 'William' } ];
|
|---|