perl中的唯一,计数和总和值

时间:2011-10-31 14:10:36

标签: perl data-structures perl-data-structures

  

可能重复:
  How can I output unique, count and sum using perl

如何在perl中获取唯一,计数和求和值?我的代码如下:

   while (<$input>) {
               chomp;
               my($f1,$f2,$f3,$f4,$f5,$f6,$f7,$f8,$f9,$f10,$f11,$f12,$f13,$f14,$f15,$f16,$f17,$f18,$f19,$f20,$f21,$f22,$f23,$f24,$f25) = split(/\|/);
             $f24  = " " if !defined($f24);

             push @ff4, qw($f4); # VEN 10/19/11

             push @fff4, $f4, $f16, $f7; # VEN 10/28/11
             ..... ....... ...... ........ ......
             ..... ....... ...... ....... .......
    my %count;
    map { $count{$_} ++ } @array;
    my@count = map { "$_ ==========> ${count{$_}}\n"} sort keys (%count);

    #print $output2 sprintf("@count\n");


    my %h;
    my @el;
    while (<@array>)
                    {
                      $h{$el[0]}{count}++;
                      $h{ $el[0]}{sum} += $el[2];
                    }

    print $output2 %h;

我正在获得这样的输出

       08/2009 ====> 2030
       08/2010 ====> 2300
       09/2010 =====> 1500

但我必须这样做:

      08/2009 ====> 2
      08/2010 ====> 3
      09/2010 =====> 5

我在Solaris上使用Perl

1 个答案:

答案 0 :(得分:0)

  1. 您的代码根本不起作用。如果您只发布不相关的不相关块,我们无法告诉您如何修复它。

  2. 要获取数组的唯一元素,请使用List::MoreUtil模块的uniq()方法。

    要计算它们,请使用scalar(@array)或简单地将数组放入标量上下文中。

    总结一下,使用List::Util模块的sum()方法

  3. 如果您不想使用标准CPAN模块,可以使用foreach循环:

    my @array = (1, 2, 3, 4, 1, 4);
    my %unique = map { $_ => 1 } @array; # keys will be unique now
    my @unique = sort keys %unique;
    my $count = scalar(@unique);
    my $sum = 0;
    $sum += $_ foreach @unique;