Scilab Website | Contribute with GitLab | Mailing list archives | ATOMS toolboxes
Scilab Online Help
2024.0.0 - Русский


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

Copyright (c) 2022-2024 (Dassault Systèmes)
Copyright (c) 2017-2022 (ESI Group)
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Tue Oct 24 14:37:08 CEST 2023