【问题标题】:Search through hash, if value is zero delete it通过哈希搜索,如果值为零,则删除它
【发布时间】:2012-09-01 02:51:03
【问题描述】:

我有一些代码如下。我正在尝试搜索散列,如果遇到一个为零的值,我想删除整个键/值元素。

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 来自哪里?我看不到它正在增加。

标签: perl key-value hash


【解决方案1】:

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

只需遍历键即可:

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

【讨论】:

    【解决方案2】:

    另一种方法:

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

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 1970-01-01
      • 2023-03-17
      • 2013-10-09
      • 2011-06-08
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      • 2016-06-27
      相关资源
      最近更新 更多