【问题标题】:Perl: Delete element in hash based on their valuesPerl:根据它们的值删除哈希中的元素
【发布时间】:2022-01-25 20:08:47
【问题描述】:

我有一个哈希值,想删除一些元素(元素 = 键+值)。键删除元素很容易,但是如果删除的条件是基于值的,我不知道该怎么做。

my %h = (  'a' => 1
         , 'b' => 1
         , 'c' => 2
       );

# delete by key
delete $h{'c'};

print map { "$_ $h{$_}\n" } keys %h;
# a 1
# b 1

我想删除使用值:

delete %h value >1

【问题讨论】:

    标签: perl hash


    【解决方案1】:

    您可以有效地循环使用 eachdelete 匹配的条目:

    #!/usr/bin/env perl
    use strict;
    use warnings;
    use Data::Dumper;
    
    my %h = (
        'a' => 1,
        'b' => 1,
        'c' => 2
        );
    
    while (my ($k, $v) = each %h) {
        delete $h{$k} if $v > 1;
    }
    
    print Dumper(\%h);
    

    来自the each documentation(已添加重点):

    任何插入到散列中的操作都可能会改变顺序,任何删除操作都会改变,除了每个或多个键返回的最新键可能会在不改变顺序的情况下被删除。

    这意味着上述循环可以安全地查看哈希的每个元素并删除所有符合条件的元素。


    您还可以使用slice 一次删除多个条目。只需构建要删除的键列表,例如通过过滤keys 的结果:

    delete @h{grep { $h{$_} > 1 } keys %h};
    

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2022-01-14
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2021-08-19
      • 2010-11-01
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多