Main Content

struct

説明

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

作成

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

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

フィールド名には、ASCII 文字 (A ~ Z、a ~ z)、数字 (0 ~ 9) およびアンダースコアを使用でき、文字で始める必要があります。フィールド名の最大長は namelengthmax です。

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

説明

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'})s(1).x = 'a' および s(2).x = 'b' を返します。

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

s = struct(field1,value1,...,fieldN,valueN) は、複数のフィールドをもつ構造体配列を作成します。

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

  • 入力 value のいずれかが非スカラー cell 配列である場合、s はその cell 配列と同じ次元をもちます。また、2 つ以上の入力 value が非スカラー cell 配列である場合、それらはすべて同じ次元でなければなりません。

    value のいずれがスカラー cell 配列であるか、それ以外のデータ型の配列である場合、structs のすべての要素に対して関連フィールド内の 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 列) の構造体です。空のフィールドを 1 つ指定して、その他のフィールドの値を維持するには、代わりに value の入力に [] を使用します。

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

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

入力引数

すべて展開する

フィールド名。文字ベクトルまたは string スカラーとして指定します。

値。任意の配列タイプとして指定します。入力 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: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    title: 'y = sin(x)'

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

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

Figure contains an axes object. The axes object with title y = sin(x) contains an object of type line.

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

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s=3×1 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=1×2 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
    {'c'}
    {'d'}

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する