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 的元素,并为其中一个字段赋值。例如,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 结构体数组。第二个元素 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 的第三个元素。

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 的元素赋值。要为特定元素赋值,请在字段名称后面指定索引。您必须在元胞数组内指定索引。但是,在数组中指定的新值的数据类型需要与字段的数据类型匹配。

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 的每个元素均为结构体,并且所有元素都具有相同的同名字段。

字段名称,指定为字符向量或字符串标量。

索引,指定为数值或逻辑值元胞数组。S1N-1 字段的索引指定结构体数组的单个元素。字段 N 的索引指定该字段中数组的一个或多个元素,可以是任何类型。

示例: 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 之前推出