exponenta event banner

структура

Структурный массив

Описание

Структурный массив - это тип данных, который группирует связанные данные с использованием контейнеров данных, называемых полями. Каждое поле может содержать данные любого типа. Доступ к данным в поле с помощью точечной нотации формы 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) создает массив структуры с указанными полем и значением. 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)

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