结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用 structName.fieldName 格式的圆点表示法来访问字段中的数据。
当您有数据要放入新的结构体中时,可以使用圆点表示法创建结构体,每次为结构体命名一个字段:
代码语言:javascript复制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 函数创建一个结构体数组。您可以同时指定许多字段,也可以创建一个非标量结构体数组。
struct语法
代码语言:javascript复制s = struct
s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)
s = struct([])
s = struct(obj)
case1:在结构体中存储相关数据变量
在结构体的字段中存储相关数据片段。您可以为这些字段提供对数据进行描述的易读名称。
通过使用圆点表示法添加字段来创建一个结构体。这些字段包含正弦波的 x 值和 y 值以及描述数据的文本。
代码语言:javascript复制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 值的数组。然后添加标题。
代码语言:javascript复制plot(data.x,data.y)
title(data.title)
case2:具有一个字段的结构体
创建包含一个字段的非标量结构体。
代码语言:javascript复制field = 'f';
value = {'some text';
[10, 20, 30];
magic(5)};
s = struct(field,value)
s=3×1 struct array with fields:
f
查看每个元素的内容。
代码语言:javascript复制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.f 等效于 s(1).f, s(2).f, s(3).f。
case3:具有多个字段的结构体
创建包含多个字段的非标量结构体。
代码语言:javascript复制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 的元胞数组是 1×2 数组,因此 s 也是 1×2 数组。因为 value1 是数值数组而不是元胞数组,所以 s(1).f1 和 s(2).f1 具有相同的内容。类似地,因为 value4 的元胞数组具有单一元素,所以 s(1).f4 和 s(2).f4 具有相同的内容。
代码语言:javascript复制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'
case4:包含元胞数组的字段
创建具有一个字段的一个结构体,该字段包含一个元胞数组。
代码语言:javascript复制field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
s = struct with fields:
mycell: {'a' 'b' 'c'}
case5:空结构体
创建包含多个字段的空结构体。
代码语言:javascript复制s = struct('a',{},'b',{},'c',{})
s =
0x0 empty struct array with fields:
a
b
c
为空结构体中的字段赋值。
代码语言:javascript复制s(1).a = 'a'
s = struct with fields:
a: 'a'
b: []
c: []