Tclの配列は多次元配列をサポートしていませんが、要素名に文字列を使用することを利用して擬似的に多次元を表現する事が出来ます。
この記事はTclの配列を使用して擬似的に多次元を表記する方法を紹介します。
多次元とは
次元とは、空間の広がりを表す単位のことです。この辺りの解釈は、物理学、自然科学、数学などにより、微妙に解釈が違うようです。一般的には以下のように理解されているようです。
0次元:点
1次元:線(点を繋げたもの)
2次元:面(線を並べたもの)
3次元:立体(面を重ねたもの)
4次元は?
時間、あの世、パラレルワールド、ブラックフォール、異次元など・・・
多次元配列のデータ構造
プログラミングにおいて、多次元配列のデータ構造を表現する場合、以下のようにエクセルなどの表計算ソフトをイメージすると理解しやすいと思います。
0次元:セル(マス目)
単純変数(値を1つだけ入れる事が出来る箱)
1次元:行
セルを縦に並べたもの(1次元配列、リスト)
2次元:行x列(縦x横)
行を横に並べたもの(2次元配列、2重になったリスト)
3次元:ワークシート、ページ
ワークシート(行x列)を積み重ねたもの
4次元:ファイル、ブック
ファイルを並べたもの
以降の次元は繰り返し。
Tclで多次元配列を擬似的に表現する
[多次元配列のイメージ]
例. 2行,3列の2次元配列
(0,0) (0,1) (0,2)
(1,0) (1,1) (1,2)
set sheet(row,col) 値
row : 行。
col : 「column(カラム:列)」の略。
要素名(index)に「行,列」を指定して配列の位置を表現する。
[使用例]
# 配列に値を代入する
set sheet(0,0) 10
set sheet(0,1) 20
set sheet(0,2) 30
set sheet(1,0) 40
set sheet(1,1) 50
set sheet(1,2) 60
% parray sheet
sheet(0,0) = 10
sheet(0,1) = 20
sheet(0,2) = 30
sheet(1,0) = 40
sheet(1,1) = 50
sheet(1,2) = 60
% set row 1
1
% set col 2
2
% puts [set sheet($row,$col)]
60
Tclから見ると配列sheetは、表の形(行x列)をしたデータ構造とは認識していません。「0,0」や「0,1」は1つの文字列で出来た別々の要素名として認識しており、単なる1次元の配列です。
コメント