struct

Описание

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

Создание

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

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

Имена полей могут содержать буквы ASCII (A–Z, a–z), цифры (0-9) и символы нижнего подчеркивания, и должны начаться с буквы. Максимальная длина имени поля namelengthmax.

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

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

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

Имя поля в виде вектора символов или строкового скаляра.

Значения в виде любого типа массива. Если любой 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: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 ... ]
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 ... ]
    title: 'y = sin(x)'

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

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

Figure contains an axes object. The axes object 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.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=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
Для просмотра документации необходимо авторизоваться на сайте