Perlで3D(またはそれ以上の次元)配列を作成/シミュレートする方法はありますか?
Webで検索しようとしましたが、何も見つかりませんでした。
2 に答える
perldocperllolを見てください。これは、多次元データ構造の一種の名前である「リストのPerlリスト」の略です。
考えてみてください@array
。の要素に単純な値を配置する代わりに、@array
配列への参照を配置すると、配列の配列または2次元配列のように扱うことができるデータ構造が得られます。3Dが欲しいですか?問題ない。あなたはあなたが望むどんな深さにも行くことができます。
@array = (
[ 'A', 'B', 'C' ],
[ 'D', 'E', 'F' ],
[ 'G', 'H', 'I' ],
); # A 2D structure represented as a LoLs.
@array = (
[ [ 'A', 'B', 'C' ], [ 'D', 'E', 'F' ], [ 'G', 'H', 'I' ] ],
[ [ 'J', 'K', 'L' ], [ 'M', 'N', 'O' ], [ 'P', 'Q', 'R' ] ],
[ [ 'S', 'T', 'U' ], [ 'V', 'W', 'X' ], [ 'Y', 'Z', 'a' ] ],
); # A 3D structure.
@array = (
[ [ [ 'A', 'B' ], [ 'C', 'D' ] ], [ [ 'E', 'F' ], [ 'G', 'H' ] ] ],
[ [ [ 'I', 'J' ], [ 'K', 'L' ] ], [ [ 'M', 'N' ], [ 'O', 'P' ] ] ],
); # A 4D structure.
あなたの想像力と利用可能なRAMは、データ構造がどれほど複雑になるか、またはデータ構造がいくつの次元を保持できるかについての唯一の制約です。均一である必要はありません。
@array = ( [ 'a', 'b' ], 'c', [ 'd', 'e', [ 'f', 'g', 'h' ] ] );
リンクリストはどうですか?
$head->[ 'a', [ 'b', [ 'c', [ 'd', [ 'e', [ 'f', [ 'g', undef ] ] ] ] ] ] ];
そして、それらはすべて、配列参照と組み合わせた単純なスカラー値のみを扱っています。また、ハッシュ参照、コード参照、グロブ参照、オブジェクト参照、さらにはスカラー参照を試すこともできます。利用できる電力はたくさんあります。
その他の有用な読み物は、 perldoc perlreftut、perldoc perlref、perldoc perldsc(データ構造クックブック)、および次の本です:中級Perl、プログラミングPerl、さらにはPerlを使用したやや時代遅れのマスタリングアルゴリズム。
2次元配列は、他の配列への参照を持つ配列になります。perldocperllolには詳細なハウツーがあります。
この基本原理から、ハッシュの配列のハッシュの配列のように、より複雑なデータ構造を作成できます。