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

perlrefとperldscを見て、配列の配列やハッシュのハッシュのように、ネストされたデータ構造を作成する方法を確認してください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

ファイルを配列に格納しようとしているだけの場合は、次のこともできます。

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

もう 1 つの簡単な方法は、ハッシュ テーブルを使用し、2 つの配列インデックスを使用してハッシュ キーを作成することです。

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