我是一位新Perl,但这里是我想要做的:

my @array2d;
while(<FILE>){
  push(@array2d[$i], $_);
}

它没有汇编以来 @array2d[$i] 是不是一个阵列,但标的价值。

我应该怎么声明@array2d作为一系列阵?

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

有帮助吗?

解决方案

要使得数组的数组,或者更准确arrayrefs的阵列,尝试是这样的:

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]发表的由@ {}包围它的阵列...然后,您可以推元件到该阵列数组引用的

看看 perlrefperldsc 来看看如何使嵌套的数据结构,就像阵阵列和哈希散列。非常有用的东西时你在做Perl。

有真的之间你写的并没有什么区别的:

@{$array2d[$i]} = <FILE>;

我只能假设你通过文件迭代。

要避免将计数器的轨道,你可以这样做:

...
push @array2d, [ <FILE> ];
...

这表示1)创建为空数组的引用,2)存储文件中的所有行,3)把它压@array2d

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

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

如果你只是想将文件存储在数组中,你也可以做到这一点:

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top