我有一个散列,希望删除一些元素(元素= key+value)。按键删除元素很容易,但是如果要删除的条件是基于值的话,我不知道该如何做。
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发布于 2022-01-25 11:35:33
您可以使用each和delete匹配的条目有效地循环这些条目:
#!/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的结果即可。
delete @h{grep { $h{$_} > 1 } keys %h};https://stackoverflow.com/questions/70847639
复制相似问题