MATLAB的struct语法解析及案例详解

2024-06-04 11:11:38 浏览数 (2)

结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用 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: []

0 人点赞