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)

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

  • 使用函数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函数的字段参数不能重复。因此,若要创建多结构体的结构体数组,必须使用元胞数组。

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

代码运行结果如下。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM