使用Perl中的值在foreach循环中打印出关联的键

时间:2015-09-06 17:56:23

标签: perl

如果值满足某个条件,我正在尝试打印哈希的键。但是,如果它满足值条件,我不确定如何访问哈希键。这是我的代码:

foreach my $x (values %hash){
    if ($x > $ARGV[1]){
        $counter = $counter + 1
        print "keys %hash\n"
    }
}
print "$counter\n" 

2 个答案:

答案 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";
    }
}