【问题标题】:cumulative frequency array in perl?perl中的累积频率数组?
【发布时间】:2012-08-31 09:53:39
【问题描述】:

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

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

【问题讨论】:

    标签: arrays perl for-loop cumulative-frequency


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这很容易在单个 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
      

      【讨论】:

        【解决方案3】:

        一种方式,非常低效:

            #!/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);
        }
        

        【讨论】:

          猜你喜欢
          • 2012-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多