18

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

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

它不能编译,因为@array2d[$i]它不是数组而是标量值。

我应该如何将@array2d 声明为数组数组?

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

4

6 回答 6

27

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

my @array = ();
foreach my $i ( 0 .. 10 ) {
  foreach my $j ( 0 .. 10 ) {
    push @{ $array[$i] }, $j;
  }
}

它为您将值推送到取消引用的 arrayref 上。您应该能够访问这样的条目:

print $array[3][2];
于 2008-11-25T13:34:03.077 回答
8

将您的“推”线更改为:

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

您基本上是通过将 $array2d[$i] 包围在 @{}... 周围来制作一个数组...然后您可以将元素推送到这个数组引用数组上。

于 2008-11-25T13:38:45.127 回答
6

查看perlrefperldsc以了解如何制作嵌套数据结构,例如数组的数组和散列的散列。做 Perl 时非常有用的东西。

于 2008-11-25T13:32:57.463 回答
3

你写的和这个真的没有区别:

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

我只能假设您正在遍历文件。

为避免跟踪计数器,您可以这样做:

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

也就是说 1)创建对空数组的引用,2)将所有行存储在 FILE 中,3)将其推送到@array2d.

于 2008-11-25T15:13:21.863 回答
0

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

$two_dimensional_array{"$i $j"} = $val;
于 2008-11-25T13:53:24.550 回答
0

如果您只是想将文件存储在数组中,您也可以这样做:

fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);
于 2011-07-28T03:03:39.407 回答