Hi all,
I am trying to perform a function on an array of arrays. It will always be an array of 2 to many arrays. They are always the same sized array, which is good as I need to sum up all of the corresponding elements. I have never needed to deal with many corresdonding arrays like this before and am stumped as to how to do this. How would you attempt to do this?
#!/usr/bin/perl
use strict;
use warnings;
my @set = (
{
'id' => '1462',
'items' => [
'9.9',
'10.1',
'10.3',
'10.5',
'10.8',
'10.94'
],
},
{
'id' => '1463',
'items' => [
'3.1',
'4.3',
'4.5',
'4.6',
'4.7',
'4.8'
],
}
);
my @aoa;
foreach my $hash_ref (@set) {
push @aoa, $hash_ref->{items};
}
my $totals = sum_up->(\@aoa);
sub sum_up {
my $aoa = shift;
my @totals;
#\@totals would look like this:
#[
# '13',
# '14.4',
# '14.8',
# '15.1',
# '15.5',
# '15.74'
#]
return \@totals;
}
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @set = (
{
'id' => '1462',
'items' => [ '9.9', '10.1', '10.3', '10.5', '10.8', '10.94' ],
},
{
'id' => '1463',
'items' => [ '3.1', '4.3', '4.5', '4.6', '4.7', '4.8' ],
}
);
my @totals;
for my $href ( @set ) {
$totals[ $_ ] += $href->{items}[ $_ ] for 0 .. $#{ $href->{items} };
}
print Dumper \@totals;
__END__
C:\test>540833
$VAR1 = [
'13',
'14.4',
'14.8',
'15.1',
'15.5',
'15.74'
];
use List::Util qw(sum);
...
for my $href ( @set ) {
$totals[ $_ ] += sum @{ $href->{items} }
}
...
It makes operations on deeply nested structures a bit more readable.
It would be beautiful if it worked--but it does not. Where do you set the value of $_?
[cpan://Algorithm::Loops] also handles parallel looping wonderfully:
use Algorithm::Loops qw( MapCarU );
use List::Util qw( sum );
my @items = map { $_->{items} } @sets;
my @totals = MapCarU { sum( @_ ) } @items;⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊
And, of course, it also works without the temporary array variable:
...
my @totals= MapCarU { sum( @_ ) } map $_->{items}, @sets;
- [tye]
perlmonks.org content © perlmonks.org and BrowserUk, codeacrobat, diotalevi, tye, vindaloo
prlmnks.org © 2006 edmund von der burg (eccles & toad)
v 0.03