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 >> |