Когда у вас есть данные, которые вы хотите организовать по имени, можно использовать структуры для их хранения. Структуры хранят данные в контейнерах, называемых полями, к которым затем можно получить доступ по указанным именам. Используйте запись через точку для создания, назначения и доступа к данным в полях структуры. Если значение, сохраненное в поле, является массивом, то можно использовать индексацию массива для доступа к элементам массива. Когда вы храните несколько структур в качестве массива структур, можно использовать индексацию массивов и запись через точку для доступа к отдельным структурам и их полям.
Сначала создайте структуру с именем patient
который имеет поля, хранящие данные о пациенте. Схема показывает, как структура хранит данные. Структура типа patient
также упоминается как скалярная структура, потому что переменная сохраняет одну структуру.
Используйте запись через точку для добавления полей name
, billing
, и test
, присвоение данных каждому полю. В этом примере синтаксис 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)
Чтобы получить доступ к части массива, хранящейся в поле, добавьте индексы, соответствующие размеру и типу массива. Например, создайте столбчатую диаграмму данных в одном столбце patient.test
.
bar(patient.test(:,1))
Массивы структур могут быть нескалярными. Можно создать массив структур с любым размером, если каждая структура в массиве имеет одинаковые поля.
Например, добавьте вторую структуру к 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 с содержимым, показанным на схеме.
Каждая запись о пациенте в массиве является структурой класса 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]))
Примечание
Индексировать в часть поля можно только при обращении к одному элементу массива структур. MATLAB® не поддерживает такие операторы, как patient(1:2).test(1:2,2:3)
, который пытается индексировать в поле для нескольких элементов массива структур. Вместо этого используйте arrayfun
функция.
fieldnames
| isfield
| struct