struct ()

Описание

Массив структур является типом данных, что связанные с группами данные с помощью контейнеров данных вызвали поля. Каждое поле может содержать любой тип данных. Данные о доступе в поле с помощью записи через точку формы structName.fieldName.

Создание

Когда у вас будут данные, чтобы поместить в новую структуру, создайте структуру с помощью записи через точку, чтобы назвать ее поля по одному:

s.a = 1;
s.b = {'A','B','C'}
s = struct with fields:
    a: 1
    b: {'A'  'B'  'C'}

Также можно создать массив структур с помощью функции struct, описанной ниже. Можно задать много полей одновременно или создать нескалярный массив структур.

Синтаксис

s = struct
s = struct(field,value)
s = struct(field1,value1,...,fieldN,valueN)
s = struct([])
s = struct(obj)

Описание

s = struct создает скалярную структуру (1 на 1) без полей.

пример

s = struct(field,value) создает массив структур с заданным полем и значением. Входной параметр value может быть любым типом данных, такой как числовое, логическое, символ или массив ячеек.

  • Если value не является массивом ячеек, или если value является скалярным массивом ячеек, то s является скалярной структурой. Например, s = struct('a',[1 2 3]) создает структуру 1 на 1, где s.a = [1 2 3].

  • Если value является нескалярным массивом ячеек, то s является массивом структур с теми же размерностями как value. Каждый элемент s содержит соответствующий элемент value. Например, s = struct('x',{'a','b'}) возвращает s(1).x = 'a' и s(2).x = 'b'.

  • Если value является массивом пустой ячейки {}, то s является пустой структурой (0 на 0).

пример

s = struct(field1,value1,...,fieldN,valueN) создает массив структур с несколькими полями.

  • Если ни одни из входных параметров value не массивы ячеек, или если все входные параметры value, которые являются массивами ячеек, являются скалярами, то s является скалярной структурой.

  • Если какие-либо из входных параметров value являются нескалярным массивом ячеек, то s имеет те же размерности как тот массив ячеек. Кроме того, если два или больше входных параметров value являются нескалярными массивами ячеек, то у них всех должны быть те же размерности.

    Для любого value, который является скалярным массивом ячеек или массивом любого другого типа данных, struct вставляет содержимое value в соответствующем поле для всех элементов s. Например, s = struct('x',{'a','b'},'y','c') возвращает s(1).x = 'a', s(2).x = 'b', s(1).y = 'c' и s(2).y = 'c'.

  • Если какой-либо вход value является массивом пустой ячейки, {}, то вывод s является пустой структурой (0 на 0). Чтобы задать пустое поле и сохранить значения других полей, используйте [] в качестве входа value вместо этого.

s = struct([]) создает пустую структуру (0 на 0) без полей.

s = struct(obj) создает скалярную структуру с именами полей и значениями, которые соответствуют свойствам obj. Функция struct не преобразовывает obj, а скорее создает s как новую структуру. Эта структура не сохраняет информацию о классе, таким образом частные, защищенные, и скрытые свойства становятся достоянием общественности поля в s. Функция struct выдает предупреждение, когда вы используете этот синтаксис.

Входные параметры

развернуть все

Имя поля, заданное как вектор символов или скаляр строки. Допустимые имена полей начинаются с буквы и могут содержать буквы, цифры и символы нижнего подчеркивания. Максимальная длина имени поля является значением, которое возвращает функция namelengthmax.

Значения, заданные как любой тип массива. Если какой-либо вход value является нескалярным массивом ячеек, то все нескалярные входные параметры массива ячеек должны иметь те же размерности.

Если какой-либо вход value является массивом пустой ячейки, {}, то вывод является пустым массивом структур. Чтобы задать одно пустое поле, используйте [].

Объект, заданный как скаляр или массив объектов. Функция struct копирует свойства obj к полям новой скалярной структуры.

Функция struct не создает структуру из большинства основополагающих типов данных. Например, если obj имеет double или тип данных char, то struct выдает ошибку сообщение. Однако struct действительно возвращает свойства таблицы или расписания как структура. Смотрите Основной принцип Классы MATLAB для списка основополагающих типов данных.

Примеры

свернуть все

Связанные с хранилищем части данных в областях структуры. Можно дать полям человекочитаемые имена, которые описывают данные.

Создайте структуру путем добавления полей в него с помощью записи через точку. Поля содержат x-и y-значения для синусоиды и текст, который описывает данные.

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

Постройте синусоиду. Можно обратиться к массивам x-и y-значений их именами полей. Затем добавьте заголовок.

plot(data.x,data.y)
title(data.title)

Создайте нескалярную структуру, которая содержит одно поле.

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s = 3x1 struct array with fields:
    f

Просмотрите содержимое каждого элемента.

s.f
ans = 
'some text'
ans = 1×3

    10    20    30

ans = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

Когда вы получаете доступ к полю нескалярной структуры, такой как s.f, MATLAB® возвращает список, разделенный запятыми. В этом случае s.f эквивалентен s(1).f, s(2).f, s(3).f.

Создайте нескалярную структуру, которая содержит несколько полей.

field1 = 'f1';  value1 = zeros(1,10);
field2 = 'f2';  value2 = {'a', 'b'};
field3 = 'f3';  value3 = {pi, pi.^2};
field4 = 'f4';  value4 = {'fourth'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s = 1x2 struct array with fields:
    f1
    f2
    f3
    f4

Массивы ячеек для value2 и value3 1 2, таким образом, s также 1 2. Поскольку value1 является числовым массивом и не массивом ячеек, и s(1).f1 и s(2).f1 имеют то же содержимое. Точно так же, потому что массив ячеек для value4 имеет один элемент, s(1).f4 и s(2).f4 имеют то же содержимое.

s(1)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'a'
    f3: 3.1416
    f4: 'fourth'

s(2)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'b'
    f3: 9.8696
    f4: 'fourth'

Создайте структуру, которая содержит пустое поле. Используйте [], чтобы задать значение пустого поля.

s = struct('f1','a','f2',[])
s = struct with fields:
    f1: 'a'
    f2: []

Создайте структуру с полем, которое содержит массив ячеек.

field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
s = struct with fields:
    mycell: {'a'  'b'  'c'}

Создайте пустую структуру, которая содержит несколько полей.

s = struct('a',{},'b',{},'c',{})
s = 

  0x0 empty struct array with fields:

    a
    b
    c

Присвойте значение полю в пустой структуре.

s(1).a = 'a'
s = struct with fields:
    a: 'a'
    b: []
    c: []

Создайте вложенную структуру, где a является структурой с полем, которое содержит другую структуру.

a.b = struct('c',{},'d',{})
a = struct with fields:
    b: [0x0 struct]

Просмотрите имена полей a.b.

fieldnames(a.b)
ans = 2x1 cell array
    {'c'}
    {'d'}

Вопросы совместимости

развернуть все

Поведение изменяется в R2019a

Расширенные возможности

Представлено до R2006a