perl中的累积频率数组?

时间:2012-08-31 09:53:39

标签: arrays perl for-loop cumulative-frequency

我有一个整数数组,我想知道如何为累积频率数组编码。我应该使用for循环还是有更快的方法。

例如给出整数:1 2 3 4 5 6 7 8 新阵列将打印:1 3 6 10 15 21 28 36 谢谢!

3 个答案:

答案 0 :(得分:0)

您也可以使用map代替foreach ... push

#!/usr/bin/perl -w
use strict;
my @arr = 1..10;
my $sum;
my @newarr = map { $sum += $_ } @arr;
print "@newarr\n";

答案 1 :(得分:0)

这在单个for循环中非常容易完成

use strict;
use warnings;

my @data = 1 .. 8;

my @cumulative = $data[0];
push @cumulative, $cumulative[-1] + $_ for @data[1..$#data];

print "@cumulative\n";

<强>输出

1 3 6 10 15 21 28 36

答案 2 :(得分:-1)

单步,非常低效:

    #!/usr/bin/env perl
    use strict;
    use warnings;
    use List::Util qw/sum/;

    my @arr = (1..10);
    my @newarr;

for my $i (0..$#arr) {
    $newarr[$i] = sum(@arr[0..$i]) 
}

循环和求和要好得多:

use strict;
use warnings;

my @arr = (1..10);
my @newarr;
my $mid;

for my $i (0..$#arr) {
  $mid += $arr[$i];
  push(@newarr,$mid);
}