2015-09-06 38 views

回答

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"; 
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"; 
    } 
} 
收集两个键和值