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

数组 – 删除Perl数组中多个非顺序元素的“最佳”方法是什么?

发布时间:2020-12-16 06:05:52 所属栏目:大数据 来源:网络整理
导读:在执行脚本时,我需要删除数组的多个元素(这些元素不是顺序的).我将在执行脚本时获取我的数组和索引. 例如: 我可能会得到一个数组和索引列表,如下所示: my @array = qw(one two three four five six seven eight nine);my @indexes = ( 2,5,7 ); 我有以下子
在执行脚本时,我需要删除数组的多个元素(这些元素不是顺序的).我将在执行脚本时获取我的数组和索引.

例如:

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

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;
    }
}

(编辑:李大同)

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

    推荐文章
      热点阅读