编程学习biancheng.45soft.com 本站提供了各种在线教程和资料,供大家学习与参考.
编程学习
当前位置: 主页 > Perl > 数组和散列 > Perl 数组和散列 片段

Perl 数组和散列 片段

如果你想访问一个多维数组的某个片段(一行的一部分),你就是在准备做一些奇特的脚标处理。指针箭头赋予我们一种访问单一变量的极好的方法,但是对于片段而言却没有这么好的便利方法。当然,你总是可以用一个循环把你的片段一个一个地取出来:

@part = ();
for ($y = 7; $y < 13; $y++) {
   push @part, $AoA[4][$y];
}

这个循环可以用一个数组片段代替:

@part = @{ $AoA[4] } [7..12];

如果你想要一个两维的片段,比如 $x 在 4..8 而 $y 是 7..12,下面是实现的一些方法:

@newAoA = ();
for ($startx = $x = 4; $x <= 8; $x++) {
     for ($starty = $y=7; $y <= 12; $y++) {
             $newAoA[$x - $startx][$y - $starty] = $AoA[$x][$y];
     }
}

在这个例子里,我们的两维数组 @newAoA 里的每个独立的数值都是一个一个地从一个两维数组 @AoA 中取出来赋值的。另外一个方法是创建一个匿名数组,每个由一个 @AoA 中我们要的子数组组成,然后然后把指向这些匿名数组的引用放到 @newAoA 中。然后我们就可以把引用写到 @newAoA (也是脚标,只是这么说而已),而不用把一个子数组值写到两维数组 @newAoA 中。这个这个方法消除了内层的循环:

for ($x = 4; $x <= 9; $x++) {
     push @newAoA, [ @{ $AoA[$x] } [ 7..12] ];
}

当然,如果你经常这么做,那么你可能就应该写一个类似 extract_rectangle 这样的子过程。而如果你经常对大的多维数组做这样的处理,那么你可能要使用 PDL(Perl Data Language)模块,你可以在 CPAN 找到。



编程学习 Perl 数组和散列 片段 转载请保留此行.谢谢.

Perl