首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Perl:基于哈希元素的值删除元素

Perl:基于哈希元素的值删除元素
EN

Stack Overflow用户
提问于 2022-01-25 11:11:51
回答 1查看 190关注 0票数 1

我有一个散列,希望删除一些元素(元素= key+value)。按键删除元素很容易,但是如果要删除的条件是基于值的话,我不知道该如何做。

代码语言:javascript
复制
my %h = (  'a' => 1
         , 'b' => 1
         , 'c' => 2
       );

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

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

我想用以下值删除:

代码语言:javascript
复制
delete %h value >1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-25 11:35:33

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

代码语言:javascript
复制
#!/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);

来自文档 (重点是后加的):

对散列的任何插入都可能改变顺序,就像任何删除一样,除外,每个或多个键返回的最新键可以在不更改顺序的情况下被删除。

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

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

代码语言:javascript
复制
delete @h{grep { $h{$_} > 1 } keys %h};
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70847639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档