2012-09-07 48 views
2

我有一些代碼如下。我試圖通過哈希搜索,如果我遇到一個零值,我想刪除整個鍵/值元素。通過哈希搜索,如果值爲零刪除它

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它甚至還沒有接近...任何幫助,將不勝感激: )

+1

哪裏'$ ind'從何而來?我看不到它增加。 – amon

回答

6

對值進行迭代不會有幫助,因爲你失去了值和鍵之間的關聯,儘管我猜這就是$ind應該幫助你跟蹤的東西。

只是遍歷代替鍵:

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

哦,好的,謝謝:) – dgBP

3

另一種方式來做到這一點:

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