MATLAB.Exponenta
–Û·Ë͇ Matlab&Toolboxes

MATLAB

В.Г.Потемкин "Введение в Matlab" (v 5.3)
Глава 6. Массивы записей

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

6.2. Доступ к полям и данным структуры

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

В качестве примера рассмотрим структуру patient вида:

ris602.gif (3887 bytes)

Рис. 6.2

Чтобы обратиться к некоторому полю, необходимо ввести точку (.) после имени структуры, за которым должно следовать имя поля:

             str = patient(2).name
             str = Ann Lane

Чтобы обратиться к элементам поля, надо использовать индексацию поля в правой части оператора присваивания. Другими словами, если поле является числовым массивом, использовать индексы массива; если поле - массив ячеек, использовать индексы массива ячеек и т. п.

Пример.
Определить для пациента 2 показатель (2, 2) медицинского теста

              n = patient(2).test(2, 2)
               n = 118

Используя тот же подход, можно присваивать значения элементам поля в левой части оператора присваивания.

Пример.
Записать для пациента 3 показатель (2, 2) медицинского теста

               patient(3).test(2, 2) = 167;

Получить значение некоторого поля для всех записей структуры нельзя; это можно сделать только для отдельной записи.

Пример.
Для вывода всех значений поля name необходимо организовать цикл:

               for i = 1 : length(patient)
                    disp(patient(i).name)
                end

                John Doe
                Ann Lane
                Alan Johnson

Чтобы получить доступ к записи, необходимо индексировать имя структуры.

Пример.
Результатом выполнения нижеследующего оператора является структура размера 1х1, которая соответствует второй записи структуры patient:

               B = patient(2).
                B =
                     name: 'Ann Lane'
                  billing: 28.5000
                     test: [3x3 double]

Функции setfield и getfield. Непосредственная индексация - это, как правило, наиболее эффективный способ определить или присвоить значение полю записи. Однако, если использовалась функция fieldnames и известно имя поля, то можно воспользоваться функциями setfield и getfield.

Функция getfield позволяет определить значение поля или элемента поля:

         f = getfield(array, {array_index}, 'field', {field_index})

где аргументы array_index и field_index задают индексы для структуры и поля; они не являются обязательными для структуры размера 1х1. Результат применения функции getfield соответствует элементу следующей структуры

          f = array(array_index).field(field_index);

Пример.
Чтобы получить доступ к полю name второй записи структуры patient, необходимо использовать функцию getfield в следующей форме

          str = getfield(patient, {2}, 'name')
          str = Ann Lane

По аналогии функция setfield позволяет присваивать значения полям, используя обращение следующего вида

            f = setfield(array, {array_index}, 'field', {field_index}, value)

Применение функции size. Функция size позволяет получить размер массива записей (структуры) или любого ее поля. Задавая в качестве аргумента имя структуры, функция size возвращает ее размеры. При задании аргумента в форме array(n).field функция size возвращает размеры поля.

Пример:
Функция

             size(patient)

для структуры patient размера 1х3 возвращает вектор

              ans = 1     3

Обращение

              ize(patient(2).name)

возвращает размер поля name для записи patient(2)

               ans = 1     8

Добавление полей. Для того чтобы добавить новое поле к структуре, достаточно добавить поле к единственной записи.

Пример.
Чтобы добавить поле для индивидуального номера страхования pin (personal insurance number) в структуре patient, надо выполнить следующий оператор присваивания

                 patient(2).pin = '125-33-5555';
                 patient(1:3).pin
                
ans =     [ ]
                 ans = 125-33-5555
                 ans =     [ ]

Теперь поле patient(2).pin имеет присвоенное значение и каждая запись включает поле pin. Этим полям соответствуют пустые массивы до тех пор, пока им не будут присвоены конкретные значения.

Удаление полей. Для удаления поля из структуры предназначена функция rmfield, которая имеет следующий синтаксис

                   struc2 = rmfield(array, 'field'),

где array - имя структуры, а 'field' - имя поля, которое подлежит удалению.

Для удаления поля name в структуре patient надо использовать оператор

                    patient = rmfield(patient, 'name');

  В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель

 


Поиск по сайту:

Система Orphus

Яндекс.Метрика