|
Создать массив
записей (структуру) |
Синтаксис:
S =
struct('<имя_поля1>',< значение>,
'<имя_поля2>',< значение>, ...)
Описание:
Функция S = struct('<имя_поля1>', <значение>,
'<имя_поля2>',<значение>, ...) создает массив
записей (структуру) с заданными именами и
значениями полей.
Пример.
Воспользуемся функцией struct, чтобы создать
структуру patient размера 1х1:
patient =
struct('name',' John Doe', 'billing', 127.00,... 'test', [79 75 73; 180 178 177.5; 220 210
205])
patient =
name: ' John Doe' billing: 127
test: [3x3 double
Сопутствующие функции: CLASS, CELL, GETFIELD, SETFIELD,
RMFIELD, FIELDNAMES.
Синтаксис:
names = fieldnames(S)
Описание:
Функция names = fieldnames(S) возвращает имена полей
структуры S в виде строк массива ячеек.
Пример.
Задана следующая структура A размера 1х2:
A(1).data = [3 4 7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9]
Определим имена ее полей, используя функцию
fieldnames:
fieldnames(A)
ans =
'data'
'nest'
Сопутствующие функции: GETFIELD, SETFIELD.
Синтаксис:
F =
getfield(s, '<имя_поля>')
F = getfield(S,
{i, j}, '<имя_поля>', {k})
Описание:
Функция F = getfield(s, '<имя_поля>'), где элемент
структуры или структура s должны иметь размер s,
возвращает содержимое указанного поля.
Функция F = getfield(S, {i, j}, '<имя_поля>', {k})
равносильна следующему оператору присваивания F
= S(i, j).<имя_поля>(k). Все индексы передаются как
массивы ячеек и заключаются в фигурные скобки;
имена полей передаются как строки.
Пример.
Задана следующая структура A размера 1х2:
A(1).data = [3 4
7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9]
Определим содержимое поля A(1).nest:
getfield(A(1), 'nest')
ans =
testnum: 'Test 1'
xdata: [4 2 8]
ydata: [7 1 6]
Это также равносильно следующему оператору
getfield(A, {1}, 'nest')
ans =
testnum:
'Test 1'
xdata: [4 2
8]
ydata: [7 1
6]
Сравните эти результаты с обращением к
оператору A.nest:
A.nest
ans =
testnum:
'Test 1'
xdata: [4 2
8]
ydata: [7 1
6]
ans =
testnum:
'Test 2'
xdata: [3 4
2]
ydata: [5 0
9]
Сопутствующие функции: SETFIELD, FIELDNAMES.
|
Установить
содержимое поля |
Синтаксис:
s =
setfield(s, '<имя_поля>', V)
s = setfield(S,
{i, j}, '<имя_поля>', {k}, V)
Описание:
Функция s = setfield(s, '<имя_поля>', V), где элемент
структуры или структура s должны иметь размер 1х1,
присваивает указанному полю значение V.
Функция s = setfield(S, {i, j}, '<имя_поля>', {k}, V)
равносильна следующему оператору присваивания
S(i, j).<имя_поля>(k) = V. Все индексы передаются как
массивы ячеек и заключаются в фигурные скобки;
имена полей передаются как строки.
Пример.
Задана следующая структура A размера 1х2:
A(1).data = [3 4 7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9]
Присвоить новое значение полю A(1).nest.xdata:
A
= setfield(A(1), 'nest.xdata', [5 3 9]);
getfield(A(1), 'nest')
ans =
testnum: 'Test 1'
xdata: [5 3 9]
ydata: [7 1 6]
Это также равносильно следующему оператору
A
= setfield(A, {1}, 'nest.xdata', [5 3 9]);
getfield(A, {1}, 'nest.xdata')
ans =
testnum: 'Test 1'
xdata: [5 3 9]
ydata: [7 1 6]
Сопутствующие функции: GETFIELD, FIELDNAMES.
Синтаксис:
S =
rmfield(S, '<имя_поля>')
S =
rmfield(S, F)
Описание:
Функция S = rmfield(S, '<имя_поля>') удаляет
указанное поле из структуры.
Функция S = rmfield(S, F), где F - символьный массив имен
полей или массив ячеек соответствующих строк,
удаляет все указанные поля из структуры.
Замечание: Удалить таким способом все поля из
структуры нельзя.
Пример.
Задана следующая структура A размера 1х2:
A(1).data = [3 4 7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
A(2).data =
[9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9]
Удалить A(1).data:
B=rmfield(A,'data')
B =
1x2 struct array with fields:
nest
B.nest
ans =
testnum: 'Test 1'
xdata: [4 2 8]
ydata: [7 1 6]
ans =
testnum: 'Test 2'
xdata: [3 4 2]
ydata: [5 0 9]
Попытка удалить поле nest приводит к сообщению об
ошибке
B =
rmfield(B, 'nest')
??? To RESHAPE the number of elements must not change.
Для выполнения функции RESHAPE должно быть изменено
количество элементов
Error in ==> d:\matlab5\toolbox\matlab\datatypes\rmfield.m
On line 43 ==> t = reshape(t,size(s));
Ошибка в ==> d:\matlab5\toolbox\matlab\datatypes\rmfield.m
В строке 43 ==> t = reshape(t,size(s));
Сопутствующие функции: SETFIELD, GETFIELD, FIELDNAMES,
STRVCAT.
Синтаксис:
k =
isfield(S, '<имя_поля>')
Описание:
Функция k = isfield(S, '<имя_поля>') возвращает 1
(логическое TRUE), если указанное имя действительно
является именем поля данной структуры.
Пример.
Задана следующая структура A размера 1х2:
A(1).data = [3 4 7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9]
Проверить, является ли поля 'data', 'nest', 'nest.xdata'
полями структуры A:
isfield(A,'data')
ans =
1
isfield(A,'nest')
ans =
1
isfield(A,'nest.xdata')
ans =
0
Сопутствующие функции: SETFIELD, GETFIELD, FIELDNAMES.
|
Логическая проверка
структуры |
Синтаксис:
k
= isstruct(S)
Описание:
Функция k = isstruct(S) возвращает 1 (логическое TRUE),
если указанное имя действительно является
именем структуры и 0 - в противном случае.
Пример.
Задана следующая структура A размера 1х2:
A(1).data = [3 4 7; 8 0 1];
A(1).nest.testnum = 'Test 1';
A(1).nest.xdata = [4 2 8];
A(1).nest.ydata = [7 1 6];
A(2).data = [9 3 2; 7 6 5];
A(2).nest.testnum = 'Test 2';
A(2).nest.xdata = [3 4 2];
A(2).nest.ydata = [5 0 9]
Проверить, является ли объект A структурой:
isstruct(A)
ans =
1
Сопутствующие функции: STRUCT, ISCELL, ISNUMERIC,
ISOBJECT.
|