对于有C语言基础的使用者,结构体这个词你可能很熟悉。没错,MATALB编程中也有结构体。而且与C语言的结构体相比,它拥有更独特的特性。
与元胞(cell)类型一样,结构体也可以存储任意类型的数据。当然,它们也存在许多不同点。最大的不同点是,结构体是以不同名字的字段作为存储容器,每个字段都可以存储任意类型的数据。此外,若要构建结构体数组,则要求每个结构体的字段数目和字段名字必须相同。下面将讲述结构体数组,单个结构体也视为1x1的结构体数组。
% 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)
代码运行结果如下。可以看出字段可以存储任意类型的数据,甚至是元胞数组和结构体。
% 1x1的结构体数组
s1 = struct; % 不含字段
s2 = struct('name', '李四', 'gender', 'male');
% 1x3的结构体数组
s3 = struct('name', {'张三', '李四'}, 'gender', 'male'); % 通过元胞数组,来创建多结构体的结构体数组
s3
s3_1 = s3(1)
s3_2 = s3(2)
代码运行结果如下。注:struct函数的字段参数不能重复。因此,若要创建多结构体的结构体数组,必须使用元胞数组。
结构体数组的访问很简单。这里不展示代码,以文字叙述。
先对结构体数组进行索引,得到待访问的结构体。再通过待访问的结构体.字段名获取该结构体的该字段的数据。此外,如果该字段的数据是一个数组,还可以对该数组进一步索引。
直接通过结构体数组.字段名,结果相当于一个逗号间隔的式子:结构体1.字段名, 结构体2.字段名, 结构体3.字段名 ...
结构体数组的拼接也很简单,和其它类型的拼接是一样的,这里不展示代码,只叙述它要遵循的纬度规则。
待拼接的结构体数组的行数相等。
待拼接的结构体数组的列数相等。
MATALB支持动态添加结构体字段,这一特点在交互设计中常被使用。
% 动态添加结构体字段的一般语法:结构体名.(动态表达式) = 待赋值
% 这里要求“动态表达式”的返回值是字符数组或字符串
此外,MATALB版本的不同,对动态表达式的要求也略有不同。详见官方帮助文档。
有很多函数可以作用于结构体数组,下面举几个常用函数的简单用法。更多函数见结构体数组的官方帮助文档。
% 1x3的结构体数组
s = struct('name', {'张三', '李四', '王二麻子'}, 'gender', 'male', 'age', {18, 20, 'unknown'});
% 函数isfield()
fieldStatus = isfield(s, {'name', 'gender'})
% 函数rmfield()
s_new = rmfield(s, {'name', 'gender'})
s
代码运行结果如下。
博主:虔诚~似锦(主博客)
个性签名:如果你愿意努力,人生最坏的结果也不过是大器晚成。
------------------------------------------------------------------------------------
如果这篇文章对你帮助的话,记得在下方点赞哦,博主在此感谢!
如果对这篇文章有疑问,请在评论区指出,欢迎探讨,共同进步。