私は次のような配列を持っています
my @array = ('cookies','balls','cookies','balls','balls');
しかし、実際のものははるかに大きい/長いです。
配列内で繰り返される各文字列の数を出力するにはどうすればよいですか?
例のように、cookie は 2 で、balls は 3 です。
使えると思います
map {$count{$_}++;} @array;
それ以外の
foreach(@array)
{
unless(defined($count{$_}))
{
$count{$_} = 1;
}
else {
$count{$_}++;
}
}
コードを簡素化します。
「配列内で繰り返される各文字列の数を出力するにはどうすればよいですか?」
#!/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
その「孤児」は出力されませんでした。
これより短いコードを試してみてください。これより短いものは得られません
my @array = ('cookies','balls','cookies','balls','balls');
my $hashh = {};
foreach (@array){
if(exists $hashh->{$_}){
$hashh->{$_}++;
} else{
$hashh->{$_} = 1;
}
}
print Dumper($hashh);