预先声明perl 2-D数组引用

时间:2014-07-10 11:25:20

标签: arrays perl memory reference declaration

我有一个Perl程序,它将最终填充5000 x 26 2-D阵列参考中的每个索引。

所以考虑一下:

my $aLarge2dArray;
for (my $i = 0; $i < 5000; $i++) {
    for (my $j = 0; $j < 26; $j++) {
        $aLarge2dArray->[$i][$j] = 'TRUE';
    };
};

我在计算机的野兽上运行这个TONS的内存,所以我不担心节省内存,但我热衷于速度。

我的直觉是,我会受益于预先定义$ aLarge2dArray以使事情变得更快,而且我已经完成了如下操作:

my $aLarge2dArray;
$aLarge2dArray->[4999][25] = 0;

我的问题:

1)这是在初始化时预先(并实例化)2d数组ref的正确/最佳方法吗?

2)这会让事情变得更快(记住记忆不是问题,我有足够的东西)?

感谢您的任何答案/指示。

1 个答案:

答案 0 :(得分:2)

不,你只会将最后一个数组中的最后一个单元格设置为零,

my $aLarge2dArray;
$aLarge2dArray->[10][5] = 0;

use Data::Dumper; print Dumper $aLarge2dArray;

输出

$VAR1 = [
      undef,
      undef,
      undef,
      undef,
      undef,
      undef,
      undef,
      undef,
      undef,
      undef,
      [
        undef,
        undef,
        undef,
        undef,
        undef,
        0
      ]
    ];

你可能想试试这个,

@$aLarge2dArray = map [ (0) x26 ], 0..4999;