MATLAB数据类型 — 结构体(struct)

前言

对于有C语言基础的使用者,结构体这个词你可能很熟悉。没错,MATALB编程中也有结构体。而且与C语言的结构体相比,它拥有更独特的特性。

与元胞(cell)类型一样,结构体也可以存储任意类型的数据。当然,它们也存在许多不同点。最大的不同点是,结构体是以不同名字的字段作为存储容器,每个字段都可以存储任意类型的数据。此外,若要构建结构体数组,则要求每个结构体的字段数目和字段名字必须相同。下面将讲述结构体数组,单个结构体也视为1x1的结构体数组。

正文

1. 结构体数组的创建

  • 直接对结构体变量名.字段名赋值(字段的命名规则和变量一样)
% 1x3的结构体数组(不明确指定位置,按水平方式排列)
s(1).name = 'LiSi';
s(1).gender = 'Male';
s(1).age = 18;
s(1).test = {'hello', 1};
s(2).name = 'LiSi';
s(2).gender = 'female';
s(2).age = 20;
s(2).test = s(1);
s
s1 = s(1)
s2 = s(2)

代码运行结果如下。可以看出字段可以存储任意类型的数据,甚至是元胞数组和结构体。

MATLAB数据类型 — 结构体(struct)_第1张图片

  • 使用函数struct()创建
% 1x1的结构体数组
s1 = struct;            % 不含字段
s2 = struct('name', '李四', 'gender', 'male');

% 1x3的结构体数组
s3 = struct('name', {'张三', '李四'}, 'gender', 'male');  % 通过元胞数组,来创建多结构体的结构体数组
s3
s3_1 = s3(1)
s3_2 = s3(2)

代码运行结果如下。注:struct函数的字段参数不能重复。因此,若要创建多结构体的结构体数组,必须使用元胞数组。

MATLAB数据类型 — 结构体(struct)_第2张图片

2. 结构体数组的访问

结构体数组的访问很简单。这里不展示代码,以文字叙述。

  • 访问结构体数组中某个结构体的某个字段

先对结构体数组进行索引,得到待访问的结构体。再通过待访问的结构体.字段名获取该结构体的该字段的数据。此外,如果该字段的数据是一个数组,还可以对该数组进一步索引。

  • 访问结构体数组中所有结构体的某个字段

直接通过结构体数组.字段名,结果相当于一个逗号间隔的式子:结构体1.字段名, 结构体2.字段名, 结构体3.字段名 ...

3. 结构体数组的拼接

结构体数组的拼接也很简单,和其它类型的拼接是一样的,这里不展示代码,只叙述它要遵循的纬度规则。

  • 水平拼接

待拼接的结构体数组的行数相等。

  • 垂直拼接

待拼接的结构体数组的列数相等。

4. 动态添加结构体字段

MATALB支持动态添加结构体字段,这一特点在交互设计中常被使用。

% 动态添加结构体字段的一般语法:结构体名.(动态表达式) = 待赋值
% 这里要求“动态表达式”的返回值是字符数组或字符串

此外,MATALB版本的不同,对动态表达式的要求也略有不同。详见官方帮助文档。

5. 结构体数组的操作函数

有很多函数可以作用于结构体数组,下面举几个常用函数的简单用法。更多函数见结构体数组的官方帮助文档。

  • isfield(),判断输入的字段是否为输入结构体数组的字段。
  • rmfield(),删除结构体中的字段。
% 1x3的结构体数组
s = struct('name', {'张三', '李四', '王二麻子'}, 'gender', 'male', 'age', {18, 20, 'unknown'});

% 函数isfield()
fieldStatus = isfield(s, {'name', 'gender'})

% 函数rmfield()
s_new = rmfield(s, {'name', 'gender'})
s

代码运行结果如下。

MATLAB数据类型 — 结构体(struct)_第3张图片

博主:虔诚~似锦(主博客)

个性签名:如果你愿意努力,人生最坏的结果也不过是大器晚成。

------------------------------------------------------------------------------------

如果这篇文章对你帮助的话,记得在下方点赞哦,博主在此感谢!

如果对这篇文章有疑问,请在评论区指出,欢迎探讨,共同进步。

你可能感兴趣的:(MATLAB,学习)