struct
строит структуру или массив структур
Синтаксис
st = struct(field1, value1, field2, value2, ...)
Аргументы
- field1, field2, ...
 - строки: имена полей структуры с учётом регистра. Разрешены расширенные не-ascii UTF-символы.
 - value1, value2, ...
 - данные, присвоенные соответствующим полям. Поддерживаются все типы данных. Если несколько значений являются нескалярными cell-массивами, то они должны быть одинакового размера. Для любого cell-скаляра cell-контейнер удаляется и его содержимое рассматривается и присваивается полю как единое целое. Обработка cell-массивов описана ниже.
 - st
 - скалярная структура или массив структур, если хотя бы одно значение является нескалярным cell-массивом.
 
Описание
Скалярная структура
Если ни одно из значений value1,
                value2, ..., valueN не
                является нескалярным cell-массивом, то
                st = struct(field1, value1, field2, value2, ...) строит
                скалярную структуру st (размером 1×1) с полями
                и значениями st.field1=value1, 
                st.field2=value2, ..., st.fieldN=valueN.
Значение любого поля такой скалярной структуры может быть скаляром
                или массивом. Размеры значений разных полей могут быть разными.
                Например:
                st = struct("u",[2 3], "v",[%t %f ; %f %t], "w","Hello") 
                совершенно допустимо и устанавливает st.u=[2 3],
                st.v=[%t %f ; %f %t] и st.w="Hello".
Можно присвоить скалярные или нескалярные cell-массивы полю
                скалярной структуры, встраивая её в скалярный cell-массив. Например:
                st = struct("num",1:3, "c",{{sin}}) установит
                st.num=1:3 и st.c={sin} ;
                в то время, как
                st = struct("text","Hello", "test",{{1, sin ; %t %z}}) 
                установит
                st.text="Hello" и st.test={1,sin;%t,%z}.
Массив структур
struct(..) позволяет строить любой массив структур -- вектор,
                матрицу или ND-массив. Все элементы массива имеют одинаковый набор
                полей field1, field2, ..., 
                fieldN.
Действительно, если хотя бы одно из указанных
                значений является нескалярным cell-массивом C,
                то st=struct(..,field,C,..) строит массив структур
                с size(st)==size(C) и устанавливает
                st(i).field=C{i} для любого индекса i.
В этом случае любые скалярные величины, определённые для других определённых
                полей, копируются и устанавливаются для всех элементов st.
Пример №1: st=struct("u", {-1,%f,%z}) определяет
                вектор-строку 1×3 структур с единственным полем "u" со значениями
                st(1).u=-1, st(2).u=%f и
                st(3).u=%z.
Пример №2: st=struct("u", {-1 ; %f}, "t", "Hi") 
                определяет вектор-столбец 2×1 структур с двумя полями "u" и "t"
                со значениями  st(1,1).u=-1,
                st(1,1).t="Hi", st(2,1).u=%f,
                st(2,1).t="Hi".
![]()  | type(st) возвращает 17,
            а typeof(st) возвращает "st". | 
Примеры
// Создать скалярную структуру Dates Dates = struct('day',25, 'month','DEC', 'year',2006) Dates.month = 'AUG' // изменить месяц Dates.year = 1973; // изменить год Dates.weekday = "Saturday" // добавить новое поле // Создать второй элемент, чтобы сделать Dates вектором дат: Dates(1,2).year = 2020 Dates(2) // Заметьте, что значение поля по умолчанию равно [] // Построение элемента полной структуры Dates(2) для всех полей. // Одинаковые поля можно декларировать в любом порядке: Dates(2) = struct('year',2000, 'day',29, 'weekday',"Tuesday", 'month', "FEB") Dates(2) Dates(2,3) = struct('weekday',"Sunday", 'day',7, 'month',"FEB", 'year',2021) Dates(2,3) size(Dates) length(Dates)
--> Dates = struct('day',25, 'month','DEC', 'year',2006)
 Dates  =
  day = 25
  month = "DEC"
  year = 2006
--> Dates.month = 'AUG'         // change the month
 Dates  =
  day = 25
  month = "AUG"
  year = 2006
--> Dates.year  = 1973;         // change the year
--> Dates.weekday = "Saturday"  // Add a new field
 Dates  =
  day = 25
  month = "AUG"
  year = 1973
  weekday = "Saturday"
--> // Create a 2nd element, to make Dates a vector of dates:
--> Dates(1,2).year = 2020
 Dates  =
  1x2 struct with fields:
  ["day", "month", "year", "weekday"]
--> Dates(2) // Note that the default fields value is []
 ans  =
  day = []
  month = []
  year = 2020
  weekday = []
--> // Building the full Dates(2) structure element for all fields.
--> // The same fields can be declared in any other order:
--> Dates(2) = struct('year',2000, 'day',29, 'weekday',"Tuesday", 'month', "FEB")
 Dates  =
  1x2 struct with fields:
  ["day", "month", "year", "weekday"]
--> Dates(2)
 ans  =
  day = 29
  month = "FEB"
  year = 2000
  weekday = "Tuesday"
--> Dates(2,3) = struct('weekday',"Sunday", 'day',7, 'month',"FEB", 'year',2021)
 Dates  =
  2x3 struct with fields:
  ["day", "month", "year", "weekday"]
--> Dates(2,3)
 ans  =
  day = 7
  month = "FEB"
  year = 2021
  weekday = "Sunday"
--> size(Dates)
 ans  =
   2.   3.
--> length(Dates)
 ans  =
   6.
Массив структур, построенный с нуля:
Dates = struct("day",{10 3 ; 25 17}, "month",{"SEP" "JUN" ; "APR" "NOV"}, "year",2020) Dates(2,1)
--> Dates = struct("day",{10 3 ; 25 17}, "month",{"SEP" "JUN" ; "APR" "NOV"}, "year",2020)
 Dates  =
  2x2 struct with fields:
  ["day", "month", "year"]
--> Dates(2,1)
 ans  =
  day = 25
  month = "APR"
  year = 2020
Структура с cell-массивами в качестве значения полей:
test = struct("number", %pi, "bool",[%f %f], "myCell",{{2 "-5";(1-%z)^3,%t}}) test.myCell test.myCell{2,1}
--> test = struct("number", %pi, "bool",[%f %f], "myCell",{{2 "-5";(1-%z)^3,%t}})
 test  =
  number = 3.1415927
  bool = [%f,%f]
  myCell: [2x2 cell]
--> test.myCell
 ans  =
  [1x1 constant  ]  [1x1 string ]
  [1x1 polynomial]  [1x1 boolean]
--> test.myCell{2,1}
 ans  =
  1 -3z +3z² -z³
Смотрите также
- fieldnames — получает имена полей переменных типа tlist, mlist или struct
 - tree_show — Отображает в виде дерева содержимое list, tlist, mlist, cell-массивы или массивы структур, Xcos block
 - makecell — Creates a cell array.
 - mlist — объект Scilab'а, определение матричноориентированного типизированного списка
 - tlist — объект Scilab'а и определение типизированного списка
 
| Report an issue | ||
| << setfield | Data Structures | tlist >> | 
