Perl计算重复的数组字符串

时间:2013-07-26 07:19:51

标签: arrays perl

我有一个类似

的数组
my @array = ('cookies','balls','cookies','balls','balls');

但真正的那个更大/更长。

如何输出数组中每个重复字符串的计数?

在示例中,cookies为2,ball为3。

4 个答案:

答案 0 :(得分:6)

我认为我们可以使用

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

而不是

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

简化代码。

答案 1 :(得分:4)

“如何输出数组中每个重复字符串的计数?”

#!/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

请注意,'孤儿'没有输出。

答案 2 :(得分:4)

使用Perl比其他一些答案更具惯用性......

use strict;
use warnings;
use 5.010;

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

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

say "$_: $count{$_}" foreach grep { $count{$_} != 1 } keys %count;

答案 3 :(得分:0)

试试这个更短的代码你不会得到比这更短的东西

my @array = ('cookies','balls','cookies','balls','balls');
my $hashh = {};
foreach (@array){
       if(exists $hashh->{$_}){
               $hashh->{$_}++;
       } else{
               $hashh->{$_} = 1;
       }
}
print Dumper($hashh);