我有大约50个数组填充数字,我必须为每个数组报告所有这些元素的总和,所以最终结果有50个单独的数组。
有没有更短的方法来做,而不是为每个数组编写不同的for循环?
我是perl的初学者。任何有用的意见/建议将不胜感激。
到目前为止,这是我的代码:
for( $j = 1 ; $j <= 50 ; $j++ ) {
for ( @arr[$j] ) {
$sum[$j] += $_;
}
print $sum[$j];
}
谢谢!
答案 0 :(得分:7)
假设你有一个数组数组,你可以使用List::Util和map
:
use strict;
use warnings;
use Data::Dumper;
use List::Util qw(sum);
my @arrays = (
[1,2,3],
[4,5,6],
[7,8,9]
);
my @sums = map sum(@$_), @arrays; # sum each array
print Dumper \@sums;
<强>输出:强>
$VAR1 = [
'6', # sum of $arrays[0]
'15', # 1
'24' # 2
];
答案 1 :(得分:4)
use strict; use warnings;
use List::Util qw ( sum );
my %data = (
cats => [ map +(rand 100), 1 .. 10 ],
dogs => [ map +(100 - rand 100), 1 .. 20 ],
);
my %sums = map { $_ => sum(@{ $data{$_} }) } keys %data;
use YAML;
print Dump \%data, \%sums;
答案 2 :(得分:2)
对于TIMTOWTDI!
# You cannot store arrays within arrays just with ((...), (...)) syntax,
# as this list will be flattened.
# Instead you should store _references_ to arrays, like this:
my @array_of_arrays = ([1..3], [4..6], [8..10]);
my @sums_of_arrays;
# ... then iterate over it, arrayref by arrayref
# (if `map` is somehow not for you) :)
for my $ref_arr (@array_of_arrays) {
my $arr_sum;
for my $el (@$ref_arr) {
$arr_sum += $el;
}
push @sums_of_arrays, $arr_sum;
}
请注意,我认为这个解决方案不如@TLP和@SinanÜnür给出的解决方案。当需要对数组的每个元素(或数组数组,如本例中)进行某些操作(例如,转换)时,For
构造是好的。但是在这里你只需要为每个元素提供一些东西 - 换句话说,就是地图。 )