-PR-
解決済み

Perlで二次配列は可能?

  • 困ってます
  • 質問No.69340
  • 閲覧数1020
  • ありがとう数5
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 91% (11/12)

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

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

連想配列を用いればそれらしいことが出来るのではないかと思ったのですが、
うまく行きません。どうかお知恵を御貸し下さい。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル12

ベストアンサー率 75% (398/526)

 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次元配列ではなく、リファレンス配列であるということに注意するようにしてください。
お礼コメント
Atalia

お礼率 91% (11/12)

大変詳しく解りやすい御説明ありがとうございます。
二次元配列の拡張はかなり手間がかかるのですね。
投稿日時 - 2001-04-29 19:24:56
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル11

ベストアンサー率 61% (157/255)

PERL5では多次元配列一応使えますが、つかいにくいっすよね。(Printしにくいでござる)

http://www02.u-page.so-net.ne.jp/ca2/denden/perl_k.htm
このへんの記述ってすこしは参考になりますか?
お礼コメント
Atalia

お礼率 91% (11/12)

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


このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ