我有一些代码如下。我正在尝试搜索散列,如果遇到零值,则想删除整个键/值元素。
my %hashy = (
a => my $a,
b => my $b,
c => my $c,
d => my $d,
e => my $e
);
$hashy{'a'} = 0;
$hashy{'b'} = 1;
$hashy{'c'} = 0;
$hashy{'d'} = 2;
$hashy{'e'} = 1;
my @keys = keys %hashy;
my @values = values %hashy;
my $ind = 0;
foreach my $v (@values) {
delete $hashy{$keys[$ind]} if ($v == 0);
}
因此,打印
%hashy
的预期输出为:b1d2e1
(忽略元素的顺序)目前,我得到:
c0a0b1d2
甚至还没有关闭...任何帮助将不胜感激:) 最佳答案
迭代值将无济于事,因为您失去了值与键之间的关联,尽管我猜想$ind
应该可以帮助您跟踪。
只需遍历键即可:
foreach my $k (keys %hashy) {
delete $hashy{$k} if ($hashy{$k} == 0);
}
关于perl - 搜索散列,如果值为零则将其删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12314403/