多次元配列
Caché は、多次元配列をサポートします。多次元配列は、1 つ以上の要素を含む永続変数で、それぞれが一意の添え字を持ちます。ユーザは異なる種類の添え字を組み合わせて使用できます。例は、以下の MyVar 配列です。
-
MyVar
-
MyVar(22)
-
MyVar(-3)
-
MyVar(“MyString”)
-
MyVar(-123409, “MyString”)
-
MyVar(“MyString”, 2398)
-
MyVar(1.2, 3, 4, “Five”, “Six”, 7)
配列ノード MyVar は ObjectScript 変数であり、この変数タイプの規約に従います。
MyVar の添え字は、正と負の数、文字列、あるいはこれらの組み合わせになります。添え字には Unicode 文字をはじめ、あらゆる文字を含めることができます。数値添え字はキャノニック形式の数として格納および参照されます。文字列の添え字は大文字と小文字を区別するリテラルとして格納および参照されます。キャノニック形式の数 (または、キャノニック形式の数へと変わる数) およびキャノニック形式の数を含む文字列は同等の添え字となります。
多次元配列の概要
多次元配列とは、添え字で示される n 次元の永続配列です。個別ノードは “グローバル” ともいい、Caché データ・ストレージのブロックを構築します。以下のような他の特性もあります。
-
ツリー構造で存在します。
-
スパース (まばらな) 配列
-
複数の設定での表示が可能
多次元ツリー構造
多次元配列の全体的な構造は ツリー と呼ばれ、上から下に拡張します。ルート、上記の MyVar が頂点です。ルートと他の添え字が付いた形式を ノード と呼びます。下にノードを持たないノードは、葉と呼ばれます。下にノードを持つノードは、親や先祖と呼ばれます。親を持つノードは、子や子孫と呼ばれます。また、同じ親を持つ子は兄弟と呼ばれます。すべての兄弟がツリーに追加されると、数値あるいはアルファベット順で自動的に並べ替えられます。
スパース多次元ストレージ
多次元配列はスパース (まばらな) 配列です。つまり、上記の例では、それぞれ定義されたノードに対し、7 つのメモリ位置のみを使用しています。また、配列を宣言したり、ディメンジョンを指定したりする必要がないため、以下のようなメモリに関する利点があります。すなわち、多次元配列に対しては事前に予約される領域がない、多次元配列は必要になるまで領域を使用しない、および多次元配列が使用する領域はすべて動的に割り当てられる、の 3 点です。例えば、配列を使用して、チェッカーと呼ばれるゲームでのプレーヤの区画を追跡するとします。チェッカーボードは、8 × 8 です。8 × 8 のチェッカーボード・サイズの配列を必要とする言語では、チェッカーによって占められる位置が 24 個を超えることがないにもかかわらず、64 個のメモリ位置が使用されます。一方で、ObjectScript では、配列は最初に必要とする位置は 24 個となり、必要な位置はゲームの進行と共にさらに少なくなります。
多次元配列の設定
多次元配列には、3 つの異なる設定があります。
-
あらゆるグローバルが使用され、配列に変換されます。この場合、グローバル ^y(1) を生成すると、グローバル ^y は配列 ^y のノードとなります。
-
あらゆるプロパティが使用され、配列に変換されます。この場合、プロパティ Person.Get(Prop,1) を作成すると、プロパティ Object.Get(Prop) は、配列 Person.Get(Prop) のノードになります。
-
あらゆるローカル変数が使用され、配列に変換されます。この場合、変数 y(1) を生成すると、変数 x は配列 x のノードとなります。
多次元配列の操作
Read コマンドと Write コマンドをそれぞれ使用して、多次元配列からデータの読み取りと書き込みができます。
Caché は、多次元配列と連動する包括的なコマンドと関数一式を提供します。
-
Set コマンドは、配列に値を設定します。
-
Kill コマンドは、配列構造のすべて、または一部を削除します。
-
Merge コマンドは、配列構造のすべてまたは一部を 2 番目の配列構造にコピーします。
-
$Data コマンドは、配列内にノードが存在するかどうかをテストできます。
このコマンドと関数一式は、多次元グローバルと多次元ローカル配列で生成できます。グローバルは “^” (キャレット文字) で始まるため、簡単に識別できます。
詳細
多次元配列の詳細は、"Caché グローバルの使用法" を参照してください。