3

如何在其中创建一个数组数组perl并使用适当的索引访问每个成员数组。

目前我正在使用一维数组,在每次迭代和打印时更新它:

for ($i=0;$i<$size;$i++)
{
  @words = @synsets[$i]->words;
  print "@words\n"
}

但由于在下一步我想执行进一步的操作,我想访问对应于每个“synset”的数组。有人可以告诉我我该怎么做吗?

4

3 回答 3

1

这是一个小的独立文件来演示基础知识。编辑以适应:-)

Data::Dumper有助于可视化数据结构 - 一个很好的学习工具。

[]充当“匿名数组构造函数”。您可以阅读更多相关信息perldoc perlref(或点击上一个链接)。有时您必须先向其他人解释某些事情,然后才能确定自己是否理解它,所以请耐心等待;-)

use 5.10.0 ;
use Data::Dump;
use strict;
use warnings;

my @AoA ;

#my $file = "testdata.txt";
#open my ($fh), "<", "$file" or die "$!";
#while  (<$fh>) {
while  (<DATA>) {
  my @line = split ; 
  push @AoA, [@line] ;
}

say for @AoA;   # shows array references
say @{$AoA[0]}[0] ;  # dereference an inner element
foreach my $i (0..$#AoA)
{
 say "@{$AoA[$i]}[2..4]" ; # prints columns 3-5 
} 

dd (@AoA) ;   # dump the data structure we created ... just to look at it.

__DATA__
1 2 3 0 8 8
4 5 6 0 7 8
7 8 9 0 6 7
于 2013-07-16T14:22:31.407 回答
1

尝试:

for my $synset ( @synsets ){
    my @words = @$synset;
    print "@words\n";
}
于 2013-07-16T13:38:24.260 回答
0

您需要创建一个对列表的引用列表,因为 Perl 不允许列表中有列表。

@sentences = ();
...
    # in the loop:
    push @sentences, \@words;

要访问单个单词,您可以执行以下操作:

$word = $sentences[0]->[0];

不过,在这种情况下可以省略箭头。

于 2013-07-16T10:31:55.197 回答