如果值满足某个条件,我正在尝试打印哈希的键。但是,如果它满足值条件,我不确定如何访问哈希键。这是我的代码:
foreach my $x (values %hash){
if ($x > $ARGV[1]){
$counter = $counter + 1
print "keys %hash\n"
}
}
print "$counter\n"
答案 0 :(得分:6)
循环显示值时,您无法访问该键。
for my $key (keys %hash) {
if ($hash{$key} > $ARGV[1]) {
$counter = $counter + 1;
print "$key\n";
}
}
print "$counter\n";
或
keys %hash; # reset iterator
while (my ($key, $value) = each %hash) {
if ($value > $ARGV[1]) {
$counter = $counter + 1;
print "$key\n";
}
}
print "$counter\n";
答案 1 :(得分:0)
您无法在给定其值的情况下访问哈希元素的键。毕竟,多个键可能具有相同的值。但是可以依赖Perl以与值相同的顺序为您提供密钥。所以你可以写这样的东西
use strict;
use warnings;
my @keys = keys %hash;
my @vals = values %hash;
my $count = 0;
for my $val ( @values ) {
my $key = shift @keys;
if ( $val > $ARGV[1] ) {
++$count;
print $key, "\n";
}
}
print "$count\n";
但是使用while
循环和each
来同时收集密钥和值会更好
while ( my ($key, $val) = each %hash ) {
if ( $val > $ARGV[1] ) {
++$count;
print $key, "\n";
}
}