-1

重複の可能性:
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を使用しています

4

1 に答える 1

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;
    
于 2011-10-31T14:18:25.510 に答える