Main Content

结构体数组

当您有要按名称组织的数据时,可以使用结构体来存储这些数据。结构体将数据存储在名为字段的容器中,然后您可以按指定的名称访问这些字段。使用圆点表示法创建、分配和访问结构体字段中的数据。如果存储在字段中的值是数组,则可以使用数组索引来访问数组的元素。当您将多个结构体存储为一个结构体数组时,可以使用数组索引和圆点表示法来访问单个结构体及其字段。

创建标量结构体

首先,创建一个名为 patient 的结构体,其中包含存储患者数据的字段。下图显示该结构体如何存储数据。像 patient 这样的结构体也称为标量结构体,因为该变量只存储一个结构体。

strucdem_01.png

使用圆点表示法添加字段 namebillingtest,为每个字段分配数据。在此示例中,语法 patient.name 创建结构体及其第一个字段。接下来的命令添加更多字段。

patient.name = 'John Doe';
patient.billing = 127;
patient.test = [79 75 73; 180 178 177.5; 220 210 205]
patient = struct with fields:
       name: 'John Doe'
    billing: 127
       test: [3x3 double]

访问字段中的值

创建字段后,可以继续使用圆点表示法来访问和更改它存储的值。

例如,更改 billing 字段的值。

patient.billing = 512.00
patient = struct with fields:
       name: 'John Doe'
    billing: 512
       test: [3x3 double]

使用圆点表示法,您还可以访问任何字段的值。例如,生成 patient.test 中各值的条形图。添加一个具有 patient.name 中文本的标题。如果字段存储数组,则此语法返回整个数组。

bar(patient.test)
title("Test Results for " + patient.name)

Figure contains an axes object. The axes object with title Test Results for John Doe contains 3 objects of type bar.

要访问存储在字段中的数组的一部分,请添加适合该数组的大小和类型的索引。例如,创建 patient.test 的一个列中数据的条形图。

bar(patient.test(:,1))

Figure contains an axes object. The axes object contains an object of type bar.

对非标量结构体数组进行索引

结构体数组可以是非标量的。您可以创建任意大小的结构体数组,只要数组中的每个结构体都有相同的字段即可。

例如,向 patients 添加第二个结构体,其中包含第二个患者的有关数据。此外,将原始值 127 赋给第一个结构体的 billing 字段。由于该数组现在有两个结构体,您必须通过索引来访问第一个结构体,如 patient(1).billing = 127 所示。

patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];
patient(1).billing = 127
patient=1×2 struct array with fields:
    name
    billing
    test

因此,patient 是 1×2 结构体数组,其内容如下图所示。

strucdem_02.png

数组中的每条患者记录都是 struct 类的结构体。由结构体构成的数组有时称为结构体数组。但是,术语结构数组结构体数组的含义相同。与其他 MATLAB® 数组类似,结构体数组可以具有任意维度。

结构体数组具有下列属性:

  • 数组中的所有结构体都具有相同数目的字段。

  • 所有结构体都具有相同的字段名称。

  • 不同结构体中的同名字段可包含不同类型或大小的数据。

如果向数组中添加新结构体而未指定其所有字段,则未指定的字段包含空数组。

patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
       name: 'New Name'
    billing: []
       test: []

要对结构体数组进行索引,请使用数组索引。例如,patient(2) 返回第二个结构体。

patient(2)
ans = struct with fields:
       name: 'Ann Lane'
    billing: 28.5000
       test: [3x3 double]

要访问字段,请使用数组索引和圆点表示法。例如,返回第二个患者的 billing 字段的值。

patient(2).billing
ans = 28.5000

您还可以对由字段存储的数组进行索引。创建一个条形图,它仅显示 patient(2).test 的前两列。

bar(patient(2).test(:,[1 2]))

Figure contains an axes object. The axes object contains 2 objects of type bar.

注意

仅当引用结构体数组的单个元素时,才能为字段的部分内容建立索引。MATLAB® 不支持诸如 patient(1:2).test(1:2,2:3) 的语句,后者尝试为结构体数组的多个元素的字段建立索引。请改用 arrayfun 函数。

另请参阅

| |

相关主题