Когда у вас есть данные, которые вы хотите организовать по наименованию, можно использовать структуры, чтобы сохранить их. Структуры хранят данные в названных полях контейнеров, к которым можно затем получить доступ именами, которые вы задаете. Используйте запись через точку, чтобы создать, присвоить, и получить доступ к данным в полях структуры. Если значение, сохраненное в поле, является массивом, то можно использовать индексацию массива, чтобы получить доступ к элементам массива. Когда вы храните несколько структур как массив структур, можно использовать индексацию массива и запись через точку, чтобы получить доступ к отдельным структурам и их полям.
Во-первых, создайте структуру под названием 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
функция.
struct
| fieldnames
| isfield