Perl中的多维数组

edd*_*die -3 perl multidimensional-array

有没有办法在Perl中创建/模拟3D(或更高维度)数组?
我试图在网上搜索,但一无所获.

Dav*_*idO 12

看看perldoc perllol.这代表"Perl列表列表",它是一种多维数据结构的名称.

考虑@array.如果不是在@array元素中放置简单值而是放置对数组的引用,那么现在您可以将数据结构视为数组数组或二维数组.想要3D吗?没问题.你可以去任何你想要的深度.

@array = (
    [ 'A', 'B', 'C' ],
    [ 'D', 'E', 'F' ],
    [ 'G', 'H', 'I' ],
); # A 2D structure represented as a LoLs.

@array = (
    [ [ 'A', 'B', 'C' ], [ 'D', 'E', 'F' ], [ 'G', 'H', 'I' ] ],
    [ [ 'J', 'K', 'L' ], [ 'M', 'N', 'O' ], [ 'P', 'Q', 'R' ] ],
    [ [ 'S', 'T', 'U' ], [ 'V', 'W', 'X' ], [ 'Y', 'Z', 'a' ] ],
); # A 3D structure.

@array = (
    [ [ [ 'A', 'B' ], [ 'C', 'D' ] ], [ [ 'E', 'F' ], [ 'G', 'H' ] ] ],
    [ [ [ 'I', 'J' ], [ 'K', 'L' ] ], [ [ 'M', 'N' ], [ 'O', 'P' ] ] ],
); # A 4D structure.
Run Code Online (Sandbox Code Playgroud)

您的想象力和可用RAM是数据结构变得复杂或可容纳多少维度的唯一约束.它甚至不必是统一的:

@array = ( [ 'a', 'b' ], 'c', [ 'd', 'e', [ 'f', 'g', 'h' ] ] );
Run Code Online (Sandbox Code Playgroud)

如何链接列表:

$head->[ 'a', [ 'b', [ 'c', [ 'd', [ 'e', [ 'f', [ 'g', undef ] ] ] ] ] ] ];
Run Code Online (Sandbox Code Playgroud)

而所有这些只处理与数组引用相结合的简单标量值.您还可以使用哈希引用,代码引用,glob引用,对象引用甚至标量引用.有很多可用的力量.

其他有用的阅读材料是perldoc perlreftut,perldoc perlrefperldoc perldsc(数据结构手册),以及以下书籍:Intermediate Perl,Perl编程,甚至有些过时的Perl Mastering算法.