アプリ版:「スタンプのみでお礼する」機能のリリースについて

毎度御世話になっております。

Perlスクリプトで二次配列のような配列の使い方は可能でしょうか?
(A*B)種類の変数を配列の形で操作したいと考えています。
A,B共に8~256ぐらいで、処理の途中で増やせる様にしたいのです。

連想配列を用いればそれらしいことが出来るのではないかと思ったのですが、
うまく行きません。どうかお知恵を御貸し下さい。

A 回答 (2件)

 Perlでは完全な2次元配列を定義する方法はありません。


代わりにリファレンスを使って、等価なデータ構造を実装できます。

例)4行5列の2次元配列
 @array = (
  ['A0'..'A4'],    # ['A0','A1','A2','A3','A4']と等価
  ['B0'..'B4'],
  ['C0'..'C4'],
  ['D0'..'D4'],
 );
このとき、$array[2][3]は'C3'です。

 ただし@arrayは2次元配列ではなく、複数の1次元配列のリファレンスを要素に持つ1次元の配列なので、拡張する際には注意が必要です。
(誤った方法で拡張すると、行ごとに列数の異なる配列が出来てしまいます。)

■行要素の拡張
 @arrayに追加する配列のリファレンスをpushします。
 追加する配列の要素数は、2次元配列の列数と同じにします。

 # 定数のリストを追加する場合
  push @array, ['E0'..'E4'];
 # 既存の配列@appendを追加する場合
  push @array, [@append];

■列要素の拡張
 @arrayの全ての要素(それぞれが配列)に、要素を追加します。

 # 列要素数を指定した値にする(大きくも小さくもできます)
  $col = 8;    # 列数を8にする
  foreach $row (@array) {
   $#$row = $col-1;
  }
 # 既存の配列の値を新しい列として追加する
  @cols = ('A5','B5','C5','D5','E5');
  for (my $i=0; $i<=$#array; ++$i) {
   push @{$array[$i]}, $cols[$i];
  }

 @arrayの全ての行の列数が一定になるように拡張しないと、2重ループなどによる配列処理が難しくなります。
 2次元配列ではなく、リファレンス配列であるということに注意するようにしてください。
    • good
    • 0
この回答へのお礼

大変詳しく解りやすい御説明ありがとうございます。
二次元配列の拡張はかなり手間がかかるのですね。

お礼日時:2001/04/29 19:24

PERL5では多次元配列一応使えますが、つかいにくいっすよね。

(Printしにくいでござる)

http://www02.u-page.so-net.ne.jp/ca2/denden/perl …
このへんの記述ってすこしは参考になりますか?
    • good
    • 0
この回答へのお礼

詳しい資料を御紹介頂きありがとう御座います。
手元の資料はPerl4について書かれているものばかりで、
多次元配列が使える事自体知りませんでした(^^;;

お礼日時:2001/05/03 07:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!