Используя индексацию, можно
легко определить значение любого поля или
элемента структуры. Точно также можно присвоить
значение любому полю или элементу поля. В
качестве примера рассмотрим структуру patient вида:
Рис. 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');
|