struct

Описание

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

Создание

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

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

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

Описание

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

пример

s = struct(field,value) создает массив структур с заданными полем и значением. The 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. The struct функция не преобразует obj, а скорее создает s как новая структура. Эта структура не сохраняет информацию о классе, поэтому частные, защищенные и скрытые свойства становятся общими полями в s. The struct функция выдает предупреждение при использовании этого синтаксиса.

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

расширить все

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

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

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

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

struct функция не создает структуру из большинства основных типов данных. Для примера, если obj имеет double или char тип данных, затем struct выдает сообщение об ошибке. Однако, struct возвращает свойства таблицы или timetable как структуры. Список основных типов данных см. в разделе «Фундаментальные классы 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)

Figure contains an axes. The axes with title y = sin(x) contains an object of type line.

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

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s=3×1 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.fMATLAB ® возвращает список, разделенный запятыми. В этом случае 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=1×2 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
    {'c'}
    {'d'}

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

расширить все

Поведение изменено в R2019a

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

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