Раздел: Документация
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
|