Main Content

setfield

構造体配列フィールドへの値の代入

説明

S = setfield(S,field,value) は、構造体 S の指定フィールドに値を代入します。たとえば、S = setfield(S,'a',1) は代入 S.a = 1 を行います。

setfield の代わりに、ドット表記 S.field = value を使用します。通常はドット表記の方が効率性が高くなります。

S に指定フィールドがない場合、setfield によって作成され、value がそれに代入されます。

S = setfield(S,field1,...,fieldN,value) は入れ子にされた構造体の指定フィールドに値を代入します。たとえば、S = setfield(S,'a','b','c',1) は代入 S.a.b.c = 1 を行います。ここで、フィールド S.aS.a.b は構造体でもあります。

S = setfield(S,idx,field1,...,fieldN,value)S の要素を指定し、そのフィールドの 1 つに値を代入します。たとえば、S = setfield(S,{3,4},'a',1) は代入 S(3,4).a = 1 を行います。

S = setfield(S,idx,field1,idx1,...,fieldN,idxN,value) は、フィールドの要素を指定します。たとえば、S = setfield(S,'a',{2},1) は代入 S.a(2) = 1 を行います。同様に、S = setfield(S,{3,4},'a',{2},'b',1) は代入 S(3,4).a(2).b = 1 を行います。

すべて折りたたむ

スカラー構造体を作成します。

S.x = linspace(0,2*pi);
S.y = sin(S.x);
S.title = ''
S = 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: ''

関数 setfield を使用してフィールドに値を代入します。

S = setfield(S,'title','y = sin(x)')
S = 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)'

別のフィールドに値を代入します。存在しないフィールドを指定すると、setfield によってそれが作成されます。

e = sqrt(abs(S.y));
S = setfield(S,'sqrty',e)
S = 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)'
    sqrty: [0 0.2518 0.3558 0.4350 0.5011 0.5586 0.6096 0.6556 0.6973 0.7353 0.7700 0.8017 0.8307 0.8571 0.8810 0.9025 0.9218 0.9389 0.9537 0.9665 0.9772 0.9858 0.9924 0.9969 0.9994 0.9999 0.9984 0.9949 0.9893 0.9818 0.9721 0.9604 ... ] (1x100 double)

ドット表記を使用してフィールドに値を代入することもできます。

S.title = 'y = sin(x), with error bar values'
S = 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), with error bar values'
    sqrty: [0 0.2518 0.3558 0.4350 0.5011 0.5586 0.6096 0.6556 0.6973 0.7353 0.7700 0.8017 0.8307 0.8571 0.8810 0.9025 0.9218 0.9389 0.9537 0.9665 0.9772 0.9858 0.9924 0.9969 0.9994 0.9999 0.9984 0.9949 0.9893 0.9818 0.9721 0.9604 ... ] (1x100 double)

入れ子にされた構造体を作成します。入れ子にされた構造体では、どのレベルの構造体においても、構造体であるフィールドと、構造体でない他のフィールドをもつことができます。

S.a.b.c = 1;
S.a.b.d = 2;
S.a.b.e = struct('f',[3 4],'g',5);
S.h = 50
S = struct with fields:
    a: [1x1 struct]
    h: 50

S は構造体ですが、S.aS.a.bS.a.b.e の各フィールドも構造体です。

S.a
ans = struct with fields:
    b: [1x1 struct]

S.a.b
ans = struct with fields:
    c: 1
    d: 2
    e: [1x1 struct]

S.a.b.e
ans = struct with fields:
    f: [3 4]
    g: 5

関数 setfield を使用して値を S.a.b.d に代入します。入れ子にされた構造体名のコンマ区切りのリストを指定する場合、最上位のフィールドと指定したフィールド名の間にあるすべてのレベルの構造体名を含めます。この場合、構造体名のコンマ区切りのリストは 'a','b' で、フィールド名は 'd' です。

S = setfield(S,'a','b','d',1024);
S.a.b
ans = struct with fields:
    c: 1
    d: 1024
    e: [1x1 struct]

ドット表記を使用して値を代入することもできます。

S.a.b.d = 2048;
S.a.b
ans = struct with fields:
    c: 1
    d: 2048
    e: [1x1 struct]

構造体配列の要素のフィールドに値を代入します。

最初に、構造体配列を作成します。すべての構造体配列と同様に、各要素は同じフィールドをもつ構造体です。

S.x = linspace(0,2*pi);
S.y = sin(S.x);
S(2).x = S.x;
S(2).y = cos(S(2).x)
S=1×2 struct array with fields:
    x
    y

setfield を使用して値を代入することもできます。フィールドが存在しない場合、setfield によってそれが作成されます。title という名前のフィールドを作成します。

S = setfield(S,{1},'title','y = sin(x)')
S=1×2 struct array with fields:
    x
    y
    title

関数 setfield は個々の要素のフィールドに値を代入しますが、出力引数は構造体配列全体です。

S の最初の要素を表示します。

S(1)
ans = 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)'

あるいは、構造体配列にインデックスを付けてから、ドット表記を使用して要素のフィールドに値を代入します。

S(2).title = 'y = cos(x)';
S(2)
ans = 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: [1 0.9980 0.9920 0.9819 0.9679 0.9501 0.9284 0.9029 0.8738 0.8413 0.8053 0.7660 0.7237 0.6785 0.6306 0.5801 0.5272 0.4723 0.4154 0.3569 0.2969 0.2358 0.1736 0.1108 0.0476 -0.0159 -0.0792 -0.1423 -0.2048 -0.2665 -0.3271 ... ] (1x100 double)
    title: 'y = cos(x)'

一部のレベルで構造体が構造体配列である、入れ子にされた構造体のフィールドに値を代入します。この例では、S は 1 行 2 列の構造体配列です。2 番目の要素である S(2) には入れ子にされた構造体 a.b があります。ここで、b は 1 行 3 列の構造体配列です。

最初に、入れ子にされた構造体を作成します。ドット表記を使用して構造体を作成した後、関数 struct を使用して別の非スカラー構造体配列を作成し、これをフィールドとして追加します。

S.a = 1;
S(2).a.b = struct('d',{5,10,20});
S
S=1×2 struct array with fields:
    a

S(2).a.b
ans=1×3 struct array with fields:
    d

S(2).a.b の 3 番目の要素を表示します。

S(2).a.b(3)
ans = struct with fields:
    d: 20

関数 setfield を使用して S(2).a.b(3) のフィールド d に新しい値を代入します。更新されたフィールドで構造体を表示します。

S = setfield(S,{2},'a','b',{3},'d',3.1416);
S(2).a.b(3)
ans = struct with fields:
    d: 3.1416

値が配列であるフィールドをもつ構造体を作成します。

S.a = [5 10 15 20 25]
S = struct with fields:
    a: [5 10 15 20 25]

関数 setfield を使用して S.a の要素に値を代入します。特定の要素に値を代入するには、フィールドの名前の後にインデックスを指定します。cell 配列内のインデックスを指定しなければなりません。ただし、データ型がフィールドのデータ型に一致する配列に新しい値を指定します。

S = setfield(S,'a',{3:5},[0 -50 -100])
S = struct with fields:
    a: [5 10 0 -50 -100]

ドット表記と配列インデックス付けを使用して同じ要素に値を代入することもできます。

S.a(3:5) = [20 40 80]
S = struct with fields:
    a: [5 10 20 40 80]

入力引数

すべて折りたたむ

構造体配列。S が非スカラーの場合、S の各要素は、すべての要素が同じ名前の同じフィールドをもつ構造体となります。

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

インデックス。数値の cell 配列または logical 値として指定します。S および 1 から N-1 のフィールドのインデックスにより、構造体配列の個々の要素を指定します。フィールド N のインデックスは、そのフィールド内の配列の、1 つ以上の任意の型の要素を指定します。

例: S = setfield(S,{1,2},'a',1)S(1,2).a = 1 と等価です。

例: S.a = [5 10 20] の場合、S = setfield(S,'a',{[2,3]},[50 100])S.a(2:3) = [50 100] と等価です。

値。任意のサイズの任意の配列タイプとして指定します。

拡張機能

バージョン履歴

R2006a より前に導入