繁体   English   中英

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

[英]How can I create multidimensional arrays in Perl?

我对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;
  }
}

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

print $array[3][2];

将您的“推送”行更改为:

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

你基本上是通过@ {}围绕它来使$ array2d [$ i]成为一个数组......然后你可以将元素推送到这个数组引用数组中。

查看perlrefperldsc ,了解如何创建嵌套数据结构,如数组数组和哈希哈希值。 当你做Perl时非常有用的东西。

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

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

我只能假设你正在迭代文件。

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

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

那说1)创建一个空数组的引用,2)将所有行存储在FILE中,3)将其推送到@array2d

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM