私はPerlに少し慣れていませんが、私がやりたいことは次のとおりです。
my @array2d;
while(<FILE>){
push(@array2d[$i], $_);
}
@array2d[$i]
は配列ではなくスカラー値であるため、コンパイルされません。
@array2d を配列の配列として宣言するにはどうすればよいですか?
もちろん、何行あるかはわかりません。
私はPerlに少し慣れていませんが、私がやりたいことは次のとおりです。
my @array2d;
while(<FILE>){
push(@array2d[$i], $_);
}
@array2d[$i]
は配列ではなくスカラー値であるため、コンパイルされません。
@array2d を配列の配列として宣言するにはどうすればよいですか?
もちろん、何行あるかはわかりません。
配列の配列、より正確には配列参照の配列を作成するには、次のようにします。
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] を @{} で囲むことで配列を作成しています...その後、この配列参照の配列に要素をプッシュできます。
あなたが書いたものとこれとの間に違いはありません:
@{$array2d[$i]} = <FILE>;
ファイルを繰り返し処理しているとしか思えません。
カウンターを追跡しないようにするには、次のようにします。
...
push @array2d, [ <FILE> ];
...
つまり、1) 空の配列への参照を作成し、2) すべての行を FILE に格納し、3) にプッシュします@array2d
。
ファイルを配列に格納しようとしているだけの場合は、次のこともできます。
fopen(FILE,"<somefile.txt");
@array = <FILE>;
close (FILE);
もう 1 つの簡単な方法は、ハッシュ テーブルを使用し、2 つの配列インデックスを使用してハッシュ キーを作成することです。
$two_dimensional_array{"$i $j"} = $val;