1

私は次のような配列を持っています

my @array = ('cookies','balls','cookies','balls','balls');

しかし、実際のものははるかに大きい/長いです。

配列内で繰り返される各文字列の数を出力するにはどうすればよいですか?

例のように、cookie は 2 で、balls は 3 です。

4

4 に答える 4

7

使えると思います

map {$count{$_}++;} @array;

それ以外の

foreach(@array)
{
    unless(defined($count{$_}))
    {
        $count{$_} = 1;
    }
    else {
        $count{$_}++;
    }
}

コードを簡素化します。

于 2013-07-26T07:38:20.977 に答える
5

「配列内で繰り返される各文字列の数を出力するにはどうすればよいですか?」

#!/usr/bin/perl

use strict;
use warnings;

my @array = ('cookies','balls','cookies','balls','balls', 'orphan');

my %count;
$count{$_}++ foreach @array;

#removing the lonely strings
while (my ($key, $value) = each(%count)) {
    if ($value == 1) {
        delete($count{$key});
    }
}

#output the counts
while (my ($key, $value) = each(%count)) {
    print "$key:$value\n";
}

版画:

cookies:2
balls:3

その「孤児」は出力されませんでした。

于 2013-07-26T07:24:21.317 に答える
1

これより短いコードを試してみてください。これより短いものは得られません

my @array = ('cookies','balls','cookies','balls','balls');
my $hashh = {};
foreach (@array){
       if(exists $hashh->{$_}){
               $hashh->{$_}++;
       } else{
               $hashh->{$_} = 1;
       }
}
print Dumper($hashh);
于 2013-07-26T07:56:30.720 に答える