[英]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)
操作,如push
或unshift
。
Data::Alias
可以提供幫助,但它不適用於最新版本的Perl。 Array::RefElem
包含api原語av_store
和av_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.