1

我试图在 Perl 中初始化一个基本上是一个时间表的二维数组。所以它看起来像这样:

Time     Mon   Tue   Wed   Thu   Fri
09:00     0     0     0     0     0  
10:00     0     0     0     0     0 
11:00     0     0     0     0     0 
12:00     0     0     0     0     0 
13:00     0     0     0     0     0 
14:00     0     0     0     0     0 
15:00     0     0     0     0     0 
16:00     0     0     0     0     0
17:00     0     0     0     0     0 
18:00     0     0     0     0     0 
19:00     0     0     0     0     0 
20:00     0     0     0     0     0 

我在 Perl 中阅读了一些关于 2D 数组的文章,但我仍然感到困惑。最简单的方法是什么?请解释一下,以便我了解发生了什么。

4

1 回答 1

3

看看perllol。它是 Perl 中列表列表的最佳文档

本质上,Perl 数组的每个元素都可以是任何标量值——字符串或数字,或者更奇特的东西,例如子例程引用或文件句柄引用。要创建一个二维数组,您需要一个数组数组,因此基本数组的每个元素都需要是数组引用

[...]构造创建一个匿名数组并返回对它的引用。匿名部分只是意味着它没有附加标识符,@data但它存在于内存中并且可以通过它的引用访问

例如,通过引用访问数组元素的语法是$array_ref->[0]针对第一个元素的。所以如果我写

my $array_ref = [ '09:00', 0, 0, 0, 0, 0 ];
print $array_ref->[0];

我会看到09:00输出

对于您的数据,您可以编写

my @data = (
  [ '09:00', 0, 0, 0, 0, 0 ],
  [ '10:00', 0, 0, 0, 0, 0 ],
  [ '11:00', 0, 0, 0, 0, 0 ],
  [ '12:00', 0, 0, 0, 0, 0 ],
  [ '13:00', 0, 0, 0, 0, 0 ],
  [ '14:00', 0, 0, 0, 0, 0 ],
  [ '15:00', 0, 0, 0, 0, 0 ],
  [ '16:00', 0, 0, 0, 0, 0 ],
  [ '17:00', 0, 0, 0, 0, 0 ],
  [ '18:00', 0, 0, 0, 0, 0 ],
  [ '19:00', 0, 0, 0, 0, 0 ],
  [ '20:00', 0, 0, 0, 0, 0 ],
);

$data[0]对保存第一行数据的(匿名)数组的引用也是如此,并且$data[0]->[0]'09:00'

此外,还有一个语法工具允许省略任何一对右括号和左括号之间的箭头,因此$data[0]->[0]可以写成$data[0][0]具有完全相同的含义

于 2012-09-17T14:41:40.070 回答