如何提取@_的子集?

时间:2018-06-08 03:32:30

标签: arrays perl subset

我有以下功能可行。但我不确定提取@_子集的最佳方法是什么。如何以最佳方式从@_中提取子集?

sub parseheader {
  my $grps_len = shift;
  my @grps;

  for ( my $i = 0; $i < $grps_len; ++$in) {
    my $x = shift;
    print "$x\n";
    push(@grps, $x);
  }

  return join(",", @grps), "\n";
}

print parseheader(3, "a", "b", "c");

2 个答案:

答案 0 :(得分:3)

使用数组切片:

public <C, D> Either<C, D> flatMap(Function<B, Either<C, D>> f) {
    if (this.isRight()) {
        return f.apply(this.right);
    } else {
        // Error: can't convert A to C
        return Either.left(this.left);
    }
}

答案 1 :(得分:3)

使用列表或数组切片。

sub parseheader { join(",", @_[ 1 .. $_[0] ]) . "\n" }

print parseheader(3, @things);

但我会用

sub take_first { @_[ 1 .. $_[0] ] }

say join ",", take_first(3, @things);

如果要删除返回的元素,可以使用splice

say join ",", splice(@things, 0, 3);

顺便说一下,

for (my $i=0; $i < $grps_len; ++$i)

是一种缓慢而复杂的写作方式

for my $i (0..$grps_len-1)