我有一个类似
的数组my @array = ('cookies','balls','cookies','balls','balls');
但真正的那个更大/更长。
如何输出数组中每个重复字符串的计数?
在示例中,cookies为2,ball为3。
答案 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);