簡體   English   中英

在Perl中使用單個命令將元素添加到多個數組

[英]Adding element to multiple array with single command in Perl

我可以使用push in perl將元素添加到多個數組中嗎?

例如

my @arr1 = qw/one two three/;
my @arr2 = qw/four five six/;
push (@arr1,@arr2), "extra";

預期輸出::

@arr1 = one two three extra
@arr2 = four five six extra

push()文檔非常清楚。

推陣列,列表

通過將LIST的值附加到ARRAY的末尾,將ARRAY視為堆棧。 ARRAY的長度增加LIST的長度。 與...具有相同的效果

 for my $value (LIST) { $ARRAY[++$#ARRAY] = $value; } 

但效率更高。 返回完成推送后數組中元素的數量。

從Perl 5.14開始,實驗功能允許push采用標量表達式。 該實驗被認為不成功,從Perl 5.24開始被刪除。

所以不行。 push()僅適用於單個數組。

您的解決方案:

push (@arr1,@arr2), "extra";

@arr2的所有元素添加到@arr1的末尾的效果。 “多余”將被忽略,因為右括號將被視為結束push()的參數列表。 use warnings您會收到一條警告,說:

在無效上下文中無用的常量(“多余”)

您可以通過兩次調用push()並將復雜性隱藏在子例程中來實現。 天真的解決方案使用對數組的引用:

sub twopush {
  my ($a1, $a2, @elems) = @_;

  push @$a1, @elems;
  push @$a2, @elems;
}

twopush(\@arr1, \@arr2, "extra");

但這是Perl的子例程原型有用的罕見情況之一。 您可以告訴子例程前兩個參數是數組,編譯器將處理引用。

sub twopush(\@\@@) {
  my ($a1, $a2, @elems) = @_;

  push @$a1, @elems;
  push @$a2, @elems;
}

twopush(@arr1, @arr2, "extra");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM