8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

0 ... 335 336 337 338 339 340 341 ... 365

S(2).name = "Smith"; S(2).age = 32; for i=l:2

fage(i)=getfield(S(i),age);

end fage

В командное окно выводится

fage =

30 32

Запись значений одноименных полей следует согласовывать с типом массива, в который заносится результат. Например, попытка выполнения цикла

for i = 1:2

f(i> = getfield(S(i>, name);

end

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

for i = 1:2

fname{i} = getfield(S(i), name);

end

□ rmfieid — удаление полей структуры.

s = rmfieid(s, field) — удаление поля с именем field из структур массива s, например, для заполненного выше массива s, поле name удаляется при помощи обращения:

>> S = rmfield(S, name)

S =

1x2 struct array with fields: age

structure array S.

Возможно удаление сразу нескольких полей: s = rmfieid(s, f), здесь f должен быть массивом символов или ячеек из строк и содержать имена удаляемых полей (работа с массивами символов описана в разд. "Массивы строк"главы 8, а с массивами ячеек в разд. "Массивы ячеек" главы 8).


О setfieid — присвоение значения полю структуры.

s = setfield(S, 1 field",v) — в поле с именем field структуры s заносится значение переменной v. Входным аргументом s должна быть именно структура, а не массив, т.е. size(S) = [11]. Заполнение массива структур производится при помощи цикла (см. getf ield).

□ struct — создание структур и массива структур.

Общий вид обращения к struct выглядит следующим образом:

S = struct!fieldl, vail, field2, val2,...).

Размеры выходного аргумента s определяются способом указания значений vail, val2,... полей fieldl, field2,...

» myS = struct(month, "May",dat,10,time,12-00) myS =

month: May dat: 10 time: 12-00-

Если vail, val2,... являются массивами ячеек одинаковой длины, то в результате s будет массивом структур:

» myS = struct (month, {May June}, daf, {10 12},..:

•time, {12-00 23-30}); » myS(l) ans =

month: May dat: 10 time: 12-00 » myS{2) ans =

month: June1 dat: 12 time: 23-30

Указание в качестве значения vail, val2 и т. д. одной ячейки приводит к заполнению данным значением полей всех структур выходного массива, например:

» mySl = structfmonth, {May}, "daf, {10 12}, time,... {12-00 23-30});


» mySl(l).month

ans =

May

» mySl(2).month

ans ""

May

□ struct2ceii — преобразование массива структур к массиву ячеек (работа с массивами ячеек описана в разд. "Массивы ячеек" главы 8).

с = struct2celi (s) — содержимое полей структур массива s заносится в ячейки массива с. Если входной аргумент имеет размеры size(S) = [m п] и каждая структура массива s состоит из р полей, то size(S) = [р m п].

» S(l,l) = struct{name, Sam, age, 16); » S(l,2) = struct(name, Nik, age, 18); » S(l,3) = struct{"name", "Dan", age, 17); » S S =

1x3 struct array with fields: name age

» C=struct2cell(S) C<:, :,1) =

1 Sam

[ 16] C(:,:,2) =

Nik

[ 18]

C( : , : ,3) =

Dan

[ 17] » size(C) ans -



0 ... 335 336 337 338 339 340 341 ... 365