setfield
为结构体数组字段赋值
语法
说明
示例
为字段赋值
创建一个标量结构体。
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.a
、S.a.b
和 S.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
是非标量,则 S
的每个元素均为结构体,并且所有元素都具有相同的同名字段。
field
— 字段名称
字符向量 | 字符串标量
字段名称,指定为字符向量或字符串标量。
idx
— 索引
数值或逻辑值元胞数组
索引,指定为数值或逻辑值元胞数组。S
和 1
至 N-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]
。
value
— 值
数组
值,指定为具有任何大小的任何类型的数组。
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
字段名称必须为常量。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)