分享

Matlab数据&数组类型详解(5)结构数组

 基算仿真 2023-05-30 发布于江苏

结构体数组也称结构数组( structure array),是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。

01

结构数组的创建

结构数组的创建方式有两种:

  • 数组名称.字段名称=字段数据值

    对于无法显示的矩阵则会给出其信息。

  • 数组名称=struct('字段名称','字段数据值')

创建的结构数组结构如下图所示

字段值可以是任意的数据类型

多元素结构数组的字段数量与名称需要一致

上图表示对于多元素结构数组而言,每一个元素的字段数量和名称都必须是一致的。

若未指定字段数据值,则默认为空矩阵[]。

和元胞数组相似,结构数组同样不需要完全连续的内存。但是,每个字段都要求连续的内存。

结构数组的可以使用空矩阵进行内存预分配。

02

结构数组的操作

连接

是用中括号[]连接结构数组。连接时需要保证结构数组的维数一致。

嵌套

结构数组同样可以作为数据存放于另一个结构数组的字段中。

索引时同样支持多级嵌套索引。

索引

可以使用字符型变量作为字段名,但索引时需要加上小括号(),使用这种方式可以方便同时修改结构数组中多个元素的字段名。

引用

将含有多个元素的结构数组的数据进行输出,变量数量需要与结构数组元素数量一致,否则将会按元素顺序进行赋值。

也可以先合并再赋值给单个变量。

03

结构数组与元胞数组的转换

  • 通过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]

这里有两种方法将上述元胞数组转换为结构数组。

  1. 沿第一个维度进行转换:

这种方式是将横轴的工龄作为结构数组的元素,纵轴的指标作为每个元素的字段因此使用下述格式进行转换。

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 元胞数组。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多