Массивы структур

Когда у вас есть данные, которые вы хотите организовать по имени, можно использовать структуры для их хранения. Структуры хранят данные в контейнерах, называемых полями, к которым затем можно получить доступ по указанным именам. Используйте запись через точку для создания, назначения и доступа к данным в полях структуры. Если значение, сохраненное в поле, является массивом, то можно использовать индексацию массива для доступа к элементам массива. Когда вы храните несколько структур в качестве массива структур, можно использовать индексацию массивов и запись через точку для доступа к отдельным структурам и их полям.

Создайте скалярную структуру

Сначала создайте структуру с именем 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)

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

Чтобы получить доступ к части массива, хранящейся в поле, добавьте индексы, соответствующие размеру и типу массива. Например, создайте столбчатую диаграмму данных в одном столбце patient.test.

bar(patient.test(:,1))

Figure contains an axes. The axes 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 с содержимым, показанным на схеме.

Каждая запись о пациенте в массиве является структурой класса 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. The axes contains 2 objects of type bar.

Примечание

Индексировать в часть поля можно только при обращении к одному элементу массива структур. MATLAB® не поддерживает такие операторы, как patient(1:2).test(1:2,2:3), который пытается индексировать в поле для нескольких элементов массива структур. Вместо этого используйте arrayfun функция.

См. также

| |

Похожие темы