【问题标题】:Perl Simple hash delete by valuePerl 简单的哈希按值删除
【发布时间】:2014-05-15 07:04:30
【问题描述】:

我在 Perl 中有一个哈希,它存储一个简单的键值查找,如下所示

'a' => hello
'b' => world
'c' => hellooo

我想有效地删除所有包含“hello”模式的键值对。这很容易通过grep 提前致谢

【问题讨论】:

    标签: regex perl hash


    【解决方案1】:

    您可以在此处使用hash slice。哈希切片返回与键列表关联的值。

    要一次删除键/值对,您可以执行以下操作..

    my $regex = qr/hello/;
    delete @h{ grep { $h{$_} =~ $regex } keys %h };
    

    【讨论】:

      【解决方案2】:
      for (keys %h) {
         delete $h{$_} if $h{$_} =~ /hello/;
      }
      

      delete $h{$_} for grep { $h{$_} =~ /hello/ } keys %h;
      

      delete @h{ grep { $h{$_} =~ /hello/ } keys %h };
      

      【讨论】:

      • 您能解释一下每个解决方案,以及它与其他解决方案的区别吗?这应该是一个教育性的答案,而不是一个快速的解决方案。
      • @PaulHicks 恕我直言,如果 OP 被告知足以能够建议他想要的答案类型(即grep),那么他应该被告知足以破译或查找基本这 3 个示例中演示的选项。
      • @Paul Hicks,他应该选择他认为更具可读性的那个。
      • 我并没有真正想到 OP。我在考虑未来的读者。
      • @Paul Hicks,他们也应该选择他们认为更易读的那个。
      猜你喜欢
      • 2010-10-20
      • 2016-02-06
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2015-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多