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