Perl 计算映射到某个值的键数
我有下面的散列Perl 计算映射到某个值的键数,perl,hash,counting,Perl,Hash,Counting,我有下面的散列 my %hash = ( w1 => '0', e2 => '1', r1 => '2', o3 => '1', h4 => '0', t5 => '1', ); 我想得到映射到散列中每个值的键数 3 keys map to value 1. 1 key map to value 2. 2 keys map to value 0. 我希望在不使用模块函数的情况下执行此操作 我想到的一种方法是循
my %hash = (
w1 => '0',
e2 => '1',
r1 => '2',
o3 => '1',
h4 => '0',
t5 => '1',
);
我想得到映射到散列中每个值的键数
3 keys map to value 1.
1 key map to value 2.
2 keys map to value 0.
我希望在不使用模块函数的情况下执行此操作
我想到的一种方法是循环遍历散列的值。如果该值有键,则增加该键的计数器。问题是事先知道值是什么,这样我就可以为每个值初始化计数器。也许有一个更简单的解决办法。我认为正则表达式可能有用
尝试1
my $string;
foreach my $value (value %hash) {
$string = join(",", $value);
}
# count the number of occurrences for each value (separated by commas)
您可以通过哈希循环:
my %counterhash = ();
while ( ($key, $value) = each %hash )
{
#print "key: $key, value: $hash{$key}\n";
$counterhash{$value}++;
}
之后,counterhash
将每个值的哈希值与该值的出现次数相加
您不必初始化每个特定$value
的键。它最初未定义,但递增时解释为零
文件说:
在Perl中只需要声明报表格式和
子程序(有时甚至不是子程序)。变量保存
未定义值(“未定义”),直到为其分配了定义值,
它不是“undef”。当用作数字时,“未定义”
被视为0;当用作字符串时,它被视为空字符串
字符串“”;当用作未分配给的引用时,
它被视为一个错误
使用另一个哈希来计算出现的次数
#!/usr/bin/perl
use warnings;
use strict;
my %hash = (
w1 => '0',
e2 => '1',
r1 => '2',
o3 => '1',
h4 => '0',
t5 => '1',
);
my %count;
for my $value (values %hash) {
$count{$value}++;
}
for my $value (keys %count) {
my $count = $count{$value};
print "$count key", $count == 1 ? q() : 's',
" map", $count == 1 ? 's' : q(),
" to $value.\n";
}
你能解释一下print语句中的语法吗?例如,什么是
?
和q()
和's'
?什么是:
?q()
是一个空字符串<代码>条件?true:false是三元运算符,如果条件为true,则返回true部分,否则返回false部分。它处理本例中的语法。这也行。您能否演示如何初始化$key
和$value
?当我做while(my($key,$value)=each%hash){…}
时,它对我不起作用。我得到了语法错误。不确定,我从中复制了它,因为我不是真正用perl编程,所以我不熟悉syntaxLOL。最后你发布了一个有效的解决方案+1,我相信你会得到更多的分数