Создание массива структур с использованием функции struct.

Test

Billing

Name

Patient

Patient

Создание массивов структур с применением операторов присваивания.

Создание массивов структур

Имеется два следующих способа создания структур:

  • Путем использования операторов присваивания.
  • С использованием функции struct.

Вы можете построить простую структуру размера 1х1 путем прямого присваивания значений индивидуальным полям. MATLAB при этом автоматически конструирует соответствующую структуру. Например, создадим 1х1 структуру данных пациента лечебницы, показанную в начале данного раздела. Для этого следует ввести следующие записи:

 

patient.name = 'John Doe';

patient.billing = 127.00;

patient.test = [79 75 73; 180 178 177.5; 220 210 205];

 

Если ввести теперь в командной строке запись

 

то MATLAB ответит

 

name: 'John Doe'

billing: 127

test: [3x3 double]

patient является массивом, представляющим собой структуру с тремя полями. Для расшире-ния данного массива нужно просто добавить соответствующие индексы после имени струк-туры:

 

patient(2).name = 'Ann Lane';

patient(2).billing = 28.50;

patient(2).test = [68 70 68; 118 118 119; 172 170 169];

Структура patient имеет теперь размер [1 2]. Отметим, что если массив структур содержит более одного элемента, то MATLAB уже не выводит на экран содержание отдельных полей при вводе имени структуры. Взамен, на дисплей выдаются общая информация о содержимом структуры, то есть имена полей:

patient =

1x2 struct array with fields:

Для получения данной информации вы можете также использовать функцию fieldnames. Данная функция выдает массив ячеек содержащих названия полей в форме строки. Если вы расширяете структуру, MATLAB запалняет те поля, в которые вы не ввели данные, пустыми матрицами так, что:

 

  • Все структуры в массиве имеют одинаковое число полей.
  • Все соответствующие поля имеют одинаковые имена.

 

Например, при вводе

 

patient(3).name = 'Alan Johnson'

 

структура patient принимает размер 1х3. При это оба поля patient(3).billing и patient(3).test содержат пустые матрицы.

Внимание!Размерыданных в одноименныхполях могут быть различными. В нашем при-мере со структурой patient поля name могут иметь различную длину, поля test могут содер-жать массивы числовых данных различных размеров и так далее.

 

Вы можете заранее создать массив структур применив функцию struct. Ее основная форма имеет вид

 

str_array = struct ('поле1',знач1,'поле2',знач2, ...)

 

где аргументами являются имена полей и их соответствующие значения. Значением поля мо-жет быть или одно значение, представленное любой допустимой конструкцией в MATLAB-е, или массив ячеек данных (массивы ячеек рассмотрены в следующем разделе). Все значения полей в списке аргументов должны иметь одинаковый вид (единственное значение или мас-сив ячеек).

 

Вы можете использовать различные методы для задания массива структур. Эти методы отличаются способом инициализации полей структуры. В качестве примера расмотрим зада-ние структуры размера 1х3 с именем weather (погода), имеющую поля temp (температура)

и rainfall (дождевые осадки). Три различные способа задания такой структуры даны в приведенной ниже таблице.

 

 

Метод Синтаксис Задание
Функция struct weather(3) = struct('temp',72,'rainfall',0.0); Структура weather(3)инициализируется с указан-ными значениями полей. По-ля остальных двух структур в массиве, weather(1) и weather(2),содержат в качес-тве данных пустые матрицы.
Сочетание функций struct и repmat weather = repmat (struct ('temp', 72, 'rainfall', 0.0), 1, 3); Все структуры в массиве weatherинициализируются с использованием одинаковых значений одноименных полей.
Функция structс использованием синтаксиса ячеек weather = struct ('temp',{68, 80, 72}, 'rainfall', {0.2,0.4,0.0} ); Структуры в массивеweatherинициализируются с разными значениями полей, заданных массивом ячеек.