コンテンツにスキップ

GNU Octave 2.1.x 日本語マニュアル/データ構造体

出典: フリー教科書『ウィキブックス(Wikibooks)』

6 データ構造体 

[編集]

Octave は,データを構造体にまとめる機能をもっています。 現在の実装では,連想配列の添え字には文字列しか使用できませんが,文法はC 言語の構造体に似ています。 この章では,Octave でデータ構造体を使用する例を紹介します。 構造体の要素は,どのような変数型でも含めることができます。 たとえば,以下の3 つの式を入力すると,3 つの要素を持つ構造体ができあがります。

x.a = 1
x.b = [1, 2; 3, 4]
x.c = "string"

構造体の値を表示するには,通常の変数と同じように,単に変数名を入力するだけです。

octave:2> x
x =
{
a = 1
b =
1 2
3 4
c = string
}

Octave では,要素が任意の順序で表示されることに注意してください。 構造体はコピーすることができます。

octave:1> y = x
y =
{
a = 1
b =
1 2
3 4
c = string
}

構造体はそれ自体が値なので,構造体の要素として他の構造体を参照することもできます。 以下の例では,構造体x の要素b の値を,構造体に変更しています。

octave:1> x.b.d = 3
x.b.d = 3
octave:2> x.b
ans =
{
d = 3
}
octave:3> x
x =
{
a = 1
b =
{
d = 3
}
c = string
}

Octave が,他の構造体を含む構造体の値を表示するときには,ある深さまでしか表示されないことに注意してください。 以下に例を示します。

octave:1> a.b.c.d.e = 1;
octave:2> a
a =
{
b =
{
c =
{
d: 1x1 struct
}
}
}

これは,深く入れ子になった構造体を出力するに当たり,長くなったり混乱したりしないようにするためのものです。

struct_levels_to_print

[編集]

                                                           [Built-in Variable]

struct_levels_to_printに値を設定することにより,Octaveが,どの深さまで構造体を表示するかを指定できます。 標準状態は2です。 関数は,構造体を返すことができます。 たとえば,以下の関数は,行列の実部と虚部を分離して,同じ構造体変数の2つの部分に格納します。

octave:1> function y = f (x)
> y.re = real (x);
> y.im = imag (x);
> endfunction

この関数に複素数を渡して呼び出すと,fはもとの引数の実部と虚部を含むデータ構造体を返し ます。

octave:2> f (rand (2) + rand (2) * I);
ans =
{
im =
0.26475 0.14828
0.18436 0.83669
re =
0.040239 0.242160
0.238081 0.402523
}

関数が返した値のリストは,構造体の要素を含むことになります。 また,それらは任意の他の変数のように添え字をつけることもできます。 以下の例を参照してください。

octave:1> [ x.u, x.s(2:3,2:3), x.v ] = svd ([1, 2; 3, 4])
x.u =
-0.40455 -0.91451
-0.91451 0.40455
x.s =
0.00000 0.00000 0.00000
0.00000 5.46499 0.00000
0.00000 0.00000 0.36597
x.v =
-0.57605 0.81742
-0.81742 -0.57605

forステートメントの特別な形式をとることにより,ループの中で,構造体の全ての要素を通して処理することも可能です (Section 12.5 [The for Statement]を参照してください)。 以下の関数を使用することにより,構造体についての情報を得ることができます。

isstruct (expr)

[編集]

                                                           [Built-in Function]

式expr が構造体であれば1 を返します。

fieldnames (struct)

[編集]

                                                           [Built-in Function]

構造体struct の要素に名付けられた文字列の,セル配列を返します。 引数に構造体を渡さずにfieldnamesを呼び出したときは,エラーとなります。

isfield (expr, name)

[編集]

                                                           [Built-in Function]

式expr が構造体であり,name という名前の要素を含むときに1 を返します。 最初の引数は構造体,2 番目の引数は文字列でなければなりません。