结构体数组也称结构数组( structure array),是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。
结构数组的创建
结构数组的创建方式有两种:
数组名称.字段名称=字段数据值
对于无法显示的矩阵则会给出其信息。
数组名称=struct('字段名称','字段数据值')
创建的结构数组结构如下图所示
字段值可以是任意的数据类型
多元素结构数组的字段数量与名称需要一致
上图表示对于多元素结构数组而言,每一个元素的字段数量和名称都必须是一致的。
若未指定字段数据值,则默认为空矩阵[]。
和元胞数组相似,结构数组同样不需要完全连续的内存。但是,每个字段都要求连续的内存。
结构数组的可以使用空矩阵进行内存预分配。
结构数组的操作
连接
是用中括号[]连接结构数组。连接时需要保证结构数组的维数一致。
嵌套
结构数组同样可以作为数据存放于另一个结构数组的字段中。
索引时同样支持多级嵌套索引。
索引
可以使用字符型变量作为字段名,但索引时需要加上小括号(),使用这种方式可以方便同时修改结构数组中多个元素的字段名。
引用
将含有多个元素的结构数组的数据进行输出,变量数量需要与结构数组元素数量一致,否则将会按元素顺序进行赋值。
也可以先合并再赋值给单个变量。
结构数组与元胞数组的转换
通过cell2struct函数将元胞数组转换为结构数组。
structArray = cell2struct(cellArray, fields, dim)
图示5x3元胞数组通过下述代码创建:
devel = {{'Lee','Reed','Hill'}, {'Dean','Frye'}, ...
{'Lane','Fox','King'}};
sales = {{'Howe','Burns'}, {'Kirby','Ford'}, {'Hall'}};
mgmt = {{'Price'}, {'Clark','Shea'}, {'Sims'}};
qual = {{'Bates','Gray'}, {'Nash'}, {'Kay','Chase'}};
docu = {{'Lloyd','Young'}, {'Ryan','Hart','Roy'}, {'Marsh'}};
employees = [devel; sales; mgmt; qual; docu]
这里有两种方法将上述元胞数组转换为结构数组。
沿第一个维度进行转换:
这种方式是将横轴的工龄作为结构数组的元素,纵轴的指标作为每个元素的字段因此使用下述格式进行转换。
rowHeadings = {'development', 'sales', 'management', ...
'quality', 'documentation'};
depts = cell2struct(employees, rowHeadings, 1)
结果为:
2.沿第二个维度进行转换:
这种方式是将横轴的工龄作为结构数组的字段,纵轴的指标作为结构数组的元素,由于使用下述格式进行转换。
colHeadings = {'fiveYears' 'tenYears' 'fifteenYears'};
years = cell2struct(employees, colHeadings, 2)
使用struct2cell函数将结构数组转换为元胞数组
输入结构数组。S 可以是任意大小的结构体数组。如果 S 是具有 p 个字段的 m×n 结构体数组,则 C 是一个 p×m×n 元胞数组。
联系客服