ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

struct

説明

"構造体配列" は、"フィールド" と呼ばれるデータ コンテナーを使って、関連するデータをグループ化するデータ型です。各フィールドには任意のデータ型を含めることができます。structName.fieldName の形式のドット表記を使用して、フィールド内のデータにアクセスします。

作成

新しい構造体に入れるデータがある場合、ドット表記を使用して一度に 1 フィールドずつ名前を付けて構造体を作成します。

s.a = 1;
s.b = {'A','B','C'}
s = struct with fields:
    a: 1
    b: {'A'  'B'  'C'}

また、以下に説明するように関数 struct を使用して構造体配列を作成することもできます。多数のフィールドを同時に指定する、または非スカラー構造体配列を作成することができます。

構文

s = struct
s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)
s = struct([])
s = struct(obj)

説明

s = struct は、フィールドなしのスカラー (1 行 1 列) 構造体を作成します。

s = struct(field,value) は、指定したフィールドと値をもつ構造体配列を作成します。入力引数 value は、数値、論理値、文字、cell 配列などの任意のデータ型を使用できます。

  • value が "cell 配列ではない" 場合、または value がスカラー cell 配列である場合、s はスカラー構造体です。たとえば、s = struct('a',[1 2 3]) は 1 行 1 列の構造体を作成し、s.a = [1 2 3] となります。

  • value が非スカラー cell 配列の場合、svalue と同じ次元の構造体配列です。s の各要素は、対応する value の要素を含みます。たとえば、s = struct('x',{'a','b'},'y','c')s(1).x = 'a's(2).x = 'b's(1).y = 'c'、および s(2).y = 'c' を返します。

  • value が空の cell 配列 {} である場合、s は空 (0 行 0 列) の構造体です。

s = struct(field1,value1,...,fieldN,valueN) は複数のフィールドを作成します。集合 value1,...,valueN 内の非スカラー cell 配列はいずれも寸法が同じでなければなりません。

  • 入力 value がいずれも cell 配列でない場合、あるいは cell 配列である入力 value のすべてがスカラーである場合、s はスカラー構造体です。

  • 入力 value のいずれかが非スカラー cell 配列である場合、s は非スカラー cell 配列と同じ次元をもちます。value のいずれがスカラー cell 配列であるか、それ以外のデータ型の配列である場合、structs のすべての要素に対して関連フィールド内の value の内容を挿入します。

  • 入力 value のいずれかが空の cell 配列 {} である場合、出力 s は空 (0 行 0 列) の構造体です。空のフィールドを 1 つ指定して、その他のフィールドの値を維持するには、代わりに value の入力に [] を使用します。

s = struct([]) は、フィールドなしの空 (0 行 0 列) の構造体を作成します。

s = struct(obj) は、obj のプロパティに対応するフィールド名と値をもつスカラー構造体を作成します。関数 struct は、obj を変換するのではなく、新しい構造体として s を作成します。この構造体はクラス情報を保持せず、プライベート プロパティ、保護プロパティおよび非表示プロパティは s 内のパブリック フィールドになります。この構文を使用すると、関数 struct が警告を発行します。

入力引数

すべて展開する

フィールド名。文字ベクトルまたは string スカラーとして指定します。有効なフィールド名は文字で始まり、文字、数字およびアンダースコアの組み合わせを使用できます。フィールド名の最大長は、関数 namelengthmax が返す値です。

値。任意の配列タイプとして指定します。入力 value のいずれかが非スカラー cell 配列の場合、すべての非スカラー cell 配列入力は同じ次元でなければなりません。

入力 value のいずれかが空の cell 配列 {} である場合、出力は空の構造体配列です。単一の空のフィールドを指定するには、[] を使用します。

オブジェクト。スカラーまたはオブジェクトの配列として指定します。関数 struct は、obj のプロパティを新しいスカラー構造体のフィールドにコピーします。

関数 struct は、ほとんどの基本データ型から構造体を作成しません。たとえば、objdouble データ型または char データ型がある場合、struct でエラー メッセージが発行されます。ただし、struct は、table または timetable のプロパティを構造体として返します。基本データ型の一覧は、MATLAB の基本クラスを参照してください。

すべて折りたたむ

関連するデータを構造体のフィールドに格納します。フィールドには、データの内容を表し、人間が読み取ることのできる名前を設定できます。

ドット表記を使ってフィールドを追加することで、構造体を作成します。フィールドには正弦波の x 値と y 値、およびデータを説明するテキストが格納されます。

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

正弦波をプロットします。フィールド名によって x 値と y 値の配列を参照することができます。その後、タイトルを追加します。

plot(data.x,data.y)
title(data.title)

1 つのフィールドをもつ非スカラー構造体を作成します。

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s = 3x1 struct array with fields:
    f

各要素の内容を表示します。

s.f
ans = 
'some text'
ans = 1×3

    10    20    30

ans = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

非スカラー構造体のフィールド (s.f など) にアクセスすると、MATLAB® はコンマ区切りのリストを返します。この場合、s.fs(1).f, s(2).f, s(3).f と等価です。

複数のフィールドをもつ非スカラー構造体を作成します。

field1 = 'f1';  value1 = zeros(1,10);
field2 = 'f2';  value2 = {'a', 'b'};
field3 = 'f3';  value3 = {pi, pi.^2};
field4 = 'f4';  value4 = {'fourth'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s = 1x2 struct array with fields:
    f1
    f2
    f3
    f4

value2 および value3 の cell 配列が 1 行 2 列の場合、s も 1 行 2 列になります。value1 は cell 配列でなく数値配列であるため、s(1).f1s(2).f1 の両方が同じコンテンツをもちます。同様に、value4 の cell 配列は 1 つの要素をもつため、s(1).f4s(2).f4 は同じコンテンツをもちます。

s(1)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'a'
    f3: 3.1416
    f4: 'fourth'

s(2)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'b'
    f3: 9.8696
    f4: 'fourth'

空のフィールドを 1 つもつ構造体を作成します。空のフィールドの値を指定するには [] を使用します。

s = struct('f1','a','f2',[])
s = struct with fields:
    f1: 'a'
    f2: []

cell 配列を含むフィールドをもつ構造体を作成します。

field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
s = struct with fields:
    mycell: {'a'  'b'  'c'}

複数のフィールドをもつ空の構造体を作成します。

s = struct('a',{},'b',{},'c',{})
s = 

  0x0 empty struct array with fields:

    a
    b
    c

空の構造体のフィールドに値を割り当てます。

s(1).a = 'a'
s = struct with fields:
    a: 'a'
    b: []
    c: []

入れ子にされた構造体を作成します。ここで、a は別の構造体を含むフィールドをもつ構造体です。

a.b = struct('c',{},'d',{})
a = struct with fields:
    b: [0x0 struct]

a.b のフィールドの名前を表示します。

fieldnames(a.b)
ans = 2x1 cell array
    {'c'}
    {'d'}

拡張機能

R2006a より前に導入