如何在Perl中创建多维数组?

如何在Perl中创建多维数组?,perl,arrays,data-structures,multidimensional-array,Perl,Arrays,Data Structures,Multidimensional Array,我对Perl有点陌生,但下面是我想做的: my @array2d; while(<FILE>){ push(@array2d[$i], $_); } my@array2d; while(){ 推送(@array2d[$i],$); } 它没有编译,因为@array2d[$i]不是数组,而是标量值 如何将@array2d声明为数组的数组 当然,我不知道我有多少行。看一看,看看如何制作嵌套的数据结构,比如数组的数组和散列的散列。在执行Perl时,这是非常有用的东西。要创建数组数组

我对Perl有点陌生,但下面是我想做的:

my @array2d;
while(<FILE>){
  push(@array2d[$i], $_);
}
my@array2d;
while(){
推送(@array2d[$i],$);
}
它没有编译,因为
@array2d[$i]
不是数组,而是标量值

如何将@array2d声明为数组的数组


当然,我不知道我有多少行。

看一看,看看如何制作嵌套的数据结构,比如数组的数组和散列的散列。在执行Perl时,这是非常有用的东西。

要创建数组数组,或者更准确地说是数组引用数组,请尝试以下操作:

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}
print $array[3][2];
它将值推送到一个取消引用的arrayref上。您应该能够访问如下条目:

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}
print $array[3][2];
将“推”行更改为:

push(@{$array2d[$i]}, $_);

您基本上是通过将$array2d[$i]包围在@{}周围而使其成为一个数组。。。然后,您可以将元素推送到这个数组引用上。

另一种简单的方法是使用哈希表并使用两个数组索引生成哈希键:

$two_dimensional_array{"$i $j"} = $val;

你写的东西和这个没有什么区别:

@{$array2d[$i]} = <FILE>;
@{$array2d[$i]}=;
我只能假设您正在遍历文件

为避免跟踪计数器,您可以执行以下操作:

...
push @array2d, [ <FILE> ];
...
。。。
推送@array2d,[];
...

也就是说,1)创建对空数组的引用,2)将所有行存储在文件中,3)将其推送到
@array2d
如果您只是尝试将文件存储在数组中,也可以执行以下操作:

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);

fopen(文件,“您也可以作为$array[3][2]访问”--多级数据结构的连续[n]或{key}索引之间不需要箭头。您是对的,感谢您提供的信息。我将更新答案以反映这一点。很好的解释。为了进一步澄清,$array2d[$I]是数组引用。在{$array2d[$I]}中,{}block返回数组引用,@sigil将其作为数组取消引用。我指出这一点是为了明确大括号是一个裸块,而不是用于颠覆优先级的设备。感谢你澄清我的解释-我知道它是有效的,但我从来不知道背后的技术原因。谢谢!不,它们是一个取消引用的块,不是一个b在perl-wle'{1 if@{;last};print“In”}print“out”中,最后一个看到的是外部的、真正的裸块,而不是内部块。实际上,这有一些古老的语法糖:-所以你可以只做
$two_dim_array{$i,$j}=$val