数组 – 从Perl中的数组中删除值的最好方法是什么?

前端之家收集整理的这篇文章主要介绍了数组 – 从Perl中的数组中删除值的最好方法是什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
数组有很多数据,我需要删除两个元素。

下面是我使用的代码片段,

my @array = (1,2,3,4,5,6,9);
my $element_omitted = 5;
@array = grep { $_ != $element_omitted } @array;

解决方法

如果您已经知道要删除的元素的索引,请使用splice。

Grep工作,如果你正在搜索

如果你需要做很多这些,你将获得更好的性能,如果你保持数组的排序顺序,因为你可以进行二进制搜索找到必要的索引。

如果在上下文中有意义,可以考虑对已删除的记录使用“魔术值”,而不是删除它们,以保存数据移动 – 例如,将删除的元素设置为undef。自然,这有自己的问题(如果你需要知道“活”元素的数量,你需要分开跟踪它,等),但可能值得麻烦,取决于你的应用程序。

编辑实际上,现在我再看一下 – 不要使用上面的grep代码。它将更有效地找到您要删除的元素的索引,然后使用splice来删除它(你累积了所有不匹配的结果的代码..)

my $index = 0;
$index++ until $arr[$index] eq 'foo';
splice(@arr,$index,1);

这将删除第一次出现。
删除所有的出现是非常相似的,除了你想要一次通过所有的索引:

my @del_indexes = grep { $arr[$_] eq 'foo' } 0..$#arr;

其余的作为一个练习留给读者 – 记住数组在你拼接时改变!

编辑2 John Siracusa正确地指出我在我的例子中有一个错误..修复,对不起。

原文链接:https://www.f2er.com/Perl/173534.html

猜你在找的Perl相关文章