簡體   English   中英

如何在Perl中連接別名數組?

[英]How do I concatenate arrays of aliases in Perl?

如何在Perl中連接別名數組,以便生成的數組還包含別名?

我想出的解決方案是:

my ($x, $y, $z) = 1 .. 3;

my $a1 = sub {\@_}->($x);

my $a2 = sub {\@_}->($y, $z);

my $a3 = sub {\@_}->(@$a1, @$a2);

say "@$a3";  # 1 2 3

$_++ for $x, $y, $z;

say "@$a3";  # 2 3 4

我並不瘋狂的是要創造$a3我必須完全解開$a1$a2 對於短數組,這不是問題,但隨着數據變大,這意味着別名數組上的所有數組操作都是O(n) ,包括傳統的O(1)操作,如pushunshift

Data::Alias可以提供幫助,但它不適用於最新版本的Perl。 Array::RefElem包含api原語av_storeav_push周圍的包裝器,可用於實現此功能。 所以像這樣的東西可以工作:

sub alias_push (\@@) {
    if (eval {require Array::RefElem}) {
       &Array::RefElem::av_push($_[0], $_) for @_[1 .. $#_]
    } else {
       $_[0] = sub {\@_}->(@{$_[0]}, @_[1 .. $#_])
    }
}

我很想知道是否有其他方法。 特別是如果有任何其他方式僅使用核心模塊。

這是您在Perl中可能需要鏈表的情況嗎? Steve Lembark談論了人們應該重新考慮滾動和展開數組的各種情況。

我很好奇你為什么要這樣做。 不是我懷疑有什么奇怪的; 我只是對這個問題感到好奇。

暫無
暫無

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

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