-3

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

4

2 回答 2

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.

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

@array = ( [ 'a', 'b' ], 'c', [ 'd', 'e', [ 'f', 'g', 'h' ] ] );

链表怎么样:

$head->[ 'a', [ 'b', [ 'c', [ 'd', [ 'e', [ 'f', [ 'g', undef ] ] ] ] ] ] ];

所有这些都只处理简单的标量值与数组引用相结合。您还可以使用散列引用、代码引用、全局引用、对象引用,甚至标量引用。有很多可用的电源。

其他有用的阅读材料是perldoc perlreftutperldoc perlrefperldoc perldsc (数据结构食谱),以及以下书籍:Intermediate PerlProgramming Perl,甚至有些过时的Mastering Algorithms with Perl

于 2012-08-14T08:29:03.800 回答
0

二维数组将是一个引用其他数组的数组。perldoc perllol有详细的操作方法。

根据这个基本原理,可以制作更复杂的数据结构,比如哈希数组的哈希数组……你明白了。

于 2012-08-14T08:28:20.453 回答