6.1.1 Basic Usage and Examples

Last-modified: 2025-03-21 (金) 21:07:41

6.1.1 基本的な使用法と例

Octave でデータ構造体を使用する例をいくつか示します。

構造体の要素は任意の値型にすることができます。たとえば、次の3つの式は

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

3つの要素を持つ構造体を作成します。。' 文字は、構造体名 (上記の例x) とフィールド名を分離し、この変数が構造体であることを Octave に示します。構造体の値を印刷するには、他の変数と同様にその名前を入力します。

x
⇒ x =
scalar structure containing the fields:
 a =  1
 b =
  1   2
  3   4
 c = string

Octave は要素を任意の順序で印刷する可能性があることに注意してください。

構造体は他の変数と同じようにコピーできます。

y = x
 ⇒ y =
 scalar structure containing the fields:
 a =  1
 b =
  1   2
  3   4
c = string

構造体自体が値であるため、構造体の要素は他の構造体も参照できます。次の文は、d 構造体にフィールドを追加しますx。フィールドの値は、値 3 を持つ d単一のフィールドを含むデータ構造体です。a

 x.d.a = 3;
 x.d
 ⇒ ans =
 scalar structure containing the fields:
 a =  3
 x
 ⇒ x =
 scalar structure containing the fields:
a =  1
b =
 1   2
 3   4
c = string
d =
 scalar structure containing the fields:
a =  3

Octave が他の構造体を含む構造体の値を出力する場合、いくつかのレベルのみが表示されることに注意してください。例:

a.b.c.d.e = 1;
a
⇒ a =
 scalar structure containing the fields:
b =
 scalar structure containing the fields:
c =
 scalar structure containing the fields:
d: 1x1 scalar struct

これにより、大きく深くネストされた構造からの出力が長くてわかりにくくなるのを防ぎます。ネストされた構造に出力するレベルの数は関数 で設定できstruct_levels_to_print、関数 を print_struct_array_contents使用すると構造体配列の内容を出力することができます。

: val = struct_levels_to_print ()

: old_val = struct_levels_to_print (new_val)

: old_val = struct_levels_to_print (new_val, "local")

表示する構造レベルの数を指定する内部変数を照会または設定します。

オプションを使用して関数内から呼び出されると"local"、関数とそれが呼び出すサブルーチンに対して変数がローカルに変更されます。関数を終了すると、元の変数値が復元されます。

See also: print_struct_array_contents.

: val = print_struct_array_contents ()

: old_val = print_struct_array_contents (new_val)

: old_val = print_struct_array_contents (new_val, "local")

構造体配列の内容を印刷するかどうかを指定する内部変数を照会または設定します。

true の場合、構造体配列要素の値が出力されます。この変数は、要素が常に出力されるスカラー構造体には影響しません。ただし、どちらの場合も、出力はstruct_levels_to_printで指定されたレベル数に制限されます。

オプションを使用して関数内から呼び出されると"local"、関数とそれが呼び出すサブルーチンに対して変数がローカルに変更されます。関数を終了すると、元の変数値が復元されます。

See also: struct_levels_to_print.

関数は構造体を返すことができます。たとえば、次の関数は行列の実数部と複素数部を分離し、同じ構造体変数の 2 つの要素に格納しますy。

function y = f (x)
y.re = real (x);
y.im = imag (x);
endfunction

複素数値の引数で呼び出されると、関数はf元の関数引数の実数部と虚数部を含むデータ構造を返します。

f (rand (2) + rand (2) * I)
⇒ ans =
 scalar structure containing the fields:
re =
 0.040239  0.242160
 0.238081  0.402523
im =
 0.26475  0.14828
 0.18436  0.83669

関数の戻りリストには構造体の要素を含めることができ、他の変数と同様にインデックスを付けることができます。例:

[ x.u, x.s(2:3,2:3), x.v ] = svd ([1, 2; 3, 4]);
x
⇒ x =
 scalar structure containing the fields:
u =
 -0.91451   0.40455
s =
 0.00000   0.00000   0.00000
 0.00000   5.46499   0.00000
 0.00000   0.00000   0.36597
v =
 -0.57605   0.81742
 -0.81742  -0.57605

特別な形式のステートメントを使用して、ループ内で構造体のすべての要素を循環処理することもできますfor( 「構造体要素のループ」を参照)。