gpt4 book ai didi

arrays - 在 Perl 数组中删除多个非顺序元素的 'best' 方法是什么?

转载 作者:行者123 更新时间:2023-12-01 09:25:32 30 4
gpt4 key购买 nike

在执行脚本时,我需要删除数组的多个元素(这些元素不是连续的)。我将在执行脚本时获取我的数组和索引。

例如:

我可能会得到一个数组和索引列表,如下所示:

my @array = qw(one two three four five six seven eight nine);

my @indexes = ( 2, 5, 7 );

我有以下子程序来做到这一点:
sub splicen {
my $count = 0;
my $array_ref = shift @_;

croak "Not an ARRAY ref $array_ref in $0 \n"
if ref $array_ref ne 'ARRAY';

for (@_) {
my $index = $_ - $count;
splice @{$array_ref}, $index, 1;
$count++;
}

return $array_ref;
}

如果我像下面这样调用我的子程序:
splicen(\@array , @indexes);

这对我有用,但是:

有没有更好的方法来做到这一点?

最佳答案

相反,如果您从数组的末尾拼接,则不必保持偏移量 $count :

sub delete_elements {
my ( $array_ref, @indices ) = @_;

# Remove indexes from end of the array first
for ( sort { $b <=> $a } @indices ) {
splice @$array_ref, $_, 1;
}
}

关于arrays - 在 Perl 数组中删除多个非顺序元素的 'best' 方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25323708/

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