Structure Arrays
When you have data that you want to organize by name, you can use structures to store it. Structures store data in containers called fields, which you can then access by the names you specify. Use dot notation to create, assign, and access data in structure fields. If the value stored in a field is an array, then you can use array indexing to access elements of the array. When you store multiple structures as a structure array, you can use array indexing and dot notation to access individual structures and their fields.
Create Scalar Structure
First, create a structure named patient
that has fields storing data about a patient. The diagram shows how the structure stores data. A structure like patient
is also referred to as a scalar structure because the variable stores one structure.
Use dot notation to add the fields name
, billing
, and test
, assigning data to each field. In this example, the syntax patient.name
creates both the structure and its first field. The commands that follow add more fields.
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]
Access Values in Fields
After you create a field, you can keep using dot notation to access and change the value it stores.
For example, change the value of the billing
field.
patient.billing = 512.00
patient = struct with fields:
name: 'John Doe'
billing: 512
test: [3x3 double]
With dot notation, you also can access the value of any field. For example, make a bar chart of the values in patient.test
. Add a title with the text in patient.name
. If a field stores an array, then this syntax returns the whole array.
bar(patient.test)
title("Test Results for " + patient.name)
To access part of an array stored in a field, add indices that are appropriate for the size and type of the array. For example, create a bar chart of the data in one column of patient.test
.
bar(patient.test(:,1))
Index into Nonscalar Structure Array
Structure arrays can be nonscalar. You can create a structure array having any size, as long as each structure in the array has the same fields.
For example, add a second structure to patients
having data about a second patient. Also, assign the original value of 127
to the billing
field of the first structure. Since the array now has two structures, you must access the first structure by indexing, as in 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
As a result, patient
is a 1-by-2 structure array with contents shown in the diagram.
Each patient record in the array is a structure of class struct
. An array of structures is sometimes referred to as a struct array. However, the terms struct array and structure array mean the same thing. Like other MATLAB® arrays, a structure array can have any dimensions.
A structure array has the following properties:
All structures in the array have the same number of fields.
All structures have the same field names.
Fields of the same name in different structures can contain different types or sizes of data.
If you add a new structure to the array without specifying all of its fields, then the unspecified fields contain empty arrays.
patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
name: 'New Name'
billing: []
test: []
To index into a structure array, use array indexing. For example, patient(2)
returns the second structure.
patient(2)
ans = struct with fields:
name: 'Ann Lane'
billing: 28.5000
test: [3x3 double]
To access a field, use array indexing and dot notation. For example, return the value of the billing
field for the second patient.
patient(2).billing
ans = 28.5000
You also can index into an array stored by a field. Create a bar chart displaying only the first two columns of patient(2).test
.
bar(patient(2).test(:,[1 2]))
Note
You can index into part of a field only when you refer to a single element of a
structure array. MATLAB® does not support statements such as
patient(1:2).test(1:2,2:3)
, which attempt to index into a field for
multiple elements of the structure array. Instead, use the arrayfun
function.
See Also
struct
| fieldnames
| isfield