通过引用修改数组

HåkonHægland

我试图编写一个子例程,该例程将接收一个数组引用,然后删除该数组的某些元素。例如:

use strict;
use warnings;

my @a = (1, 2, 3, 6);
func1 (\@a);

sub func1 {
    my $a = shift;

    my @b = (2, 6);

    for my $val_to_remove (@b) {
        for my $i (0..$#$a) {
            my $val = $a->[$i];
            if ( $val == $val_to_remove ) {
                splice @$a, $i, 1;
                last;
            }
        }
    }
}

至少可以说,使用两个for循环似乎有点尴尬有可能简化吗?

我也试过

use strict;
use warnings;

my @a = (1, 2, 3, 6);

my $temp = \@a;
func2 (\$temp );

sub func2 {
    my $a = shift;

    $$a = [2, 6];
}

但是然后@a不进行修改,而是$temp进行修改

我还想避免将引用传递给引用,因为那样会使其他模块的调用语法混乱。

洛伊奇

使用哈希作为指示符功能,可以有效地识别要删除的项目;使用grep过滤掉它们:

sub func1 {
    my $a = shift;
    my %b = map { ($_ => 1) } (2, 6);
    @$a = grep { !$b{$_} } @$a;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章