私はPerlに少し慣れていませんが、これが私がやりたいことです:
my @array2d;
while(<FILE>){
Push(@array2d[$i], $_);
}
@array2d[$i]
は配列ではなくスカラー値であるため、コンパイルされません。
@ array2dを配列の配列としてどのように宣言する必要がありますか?
もちろん、行数はわかりません。
配列の配列、より正確にはarrayrefの配列を作成するには、次のようにしてみてください。
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;