搜索哈希值,如果值为零则删除它

时间:2012-09-07 08:25:44

标签: perl key-value hash

我有一些代码如下。我试图搜索哈希值,如果我遇到一个零值,我想删除整个键/值元素。

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甚至不接近......任何帮助都会受到赞赏:)

2 个答案:

答案 0 :(得分:6)

迭代这些值无济于事,因为你失去了值和键之间的关联,尽管我猜这是$ind应该帮助你跟踪的内容。

只需迭代按键:

foreach my $k (keys %hashy) {
    delete $hashy{$k} if ($hashy{$k} == 0);
}

答案 1 :(得分:3)

另一种方法:

delete @hash{ grep $hash{$_} == 0, keys %hash };