gpt4 book ai didi

arrays - 在 Perl 中从数组中删除值的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 05:17:17 29 4
gpt4 key购买 nike

数组有很多数据,我需要删除两个元素。

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

my @array = (1,2,3,4,5,5,6,5,4,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;

剩下的留给读者作为练习——记住数组在拼接时会发生变化!

Edit2 John Siracusa 正确地指出我的示例中有一个错误..已修复,对此感到抱歉。

关于arrays - 在 Perl 中从数组中删除值的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/174292/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com