我有大约 50 个充满数字的数组,我必须为每个数组报告所有这些元素的总和,因此最终结果有 50 个单个数组的总和。
有没有更短的方法来做到这一点,而不是为每个数组编写不同的 for 循环?
我是 perl 的初学者。任何有用的评论/建议将不胜感激。
到目前为止,这是我的代码:
for( $j = 1 ; $j <= 50 ; $j++ ) {
for ( @arr[$j] ) {
$sum[$j] += $_;
}
print $sum[$j];
}
谢谢!
您可以使用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
];
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;
为了蒂姆托迪!
# 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
当您需要对数组的每个元素(或数组的数组,如本例中)执行某些操作(例如转换)时,构造是好的。但是在这里,您只需要为每个元素提供一些东西——换句话说,就是一张地图。)