加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:28:48 所属栏目:大数据 来源:网络整理
导读:数组有很多数据,我需要删除两个元素。 下面是我使用的代码片段, my @array = (1,2,3,4,5,6,9);my $element_omitted = 5;@array = grep { $_ != $element_omitted } @array; 解决方法 如果您已经知道要删除的元素的索引,请使用splice。 Grep工作,如果你正
数组有很多数据,我需要删除两个元素。

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

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正确地指出我在我的例子中有一个错误..修复,对不起。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读