如何使用 Perl 中的 splice 从数组中一次性删除随机元素?

问题描述 投票:0回答:1

我有一个 Perl 数组,如下所示:

我的@arr = qw(ram sam ham dam yam fam lam cam)

我想使用 splice 从上面的数组中删除 sam 、 yam 和 lam 。 我正在使用下面的代码来做到这一点:

# first getting the index of sam 
(my  $ind ) = grep {$arr[$_] eq 'sam'} 0 .. $#arr;
splice(@arr, $ind, 1); 

我的问题是,由于数组元素已经改变了位置,我需要再次获取 yam 和 lam 的索引并对数组进行拼接。

有没有其他方法可以一次性使用 splice 从数组中删除随机元素。我可以一次获取所有它们的索引并将它们从数组中删除,但这些位置将保留我不想要的 undef 值。

谢谢

arrays perl splice
1个回答
0
投票

如果您知道要删除的元素的值(在本例中为

sam
等),而不是索引,可以这样做

my @filtered_ary = grep { not /\bsam|yam|lam\b/ } @ary;

或者覆盖数组

@ary = grep { ... } @ary

无需先找到索引才能使用

splice

© www.soinside.com 2019 - 2024. All rights reserved.