setfield

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

Синтаксис

S = setfield(S,field,value)
S = setfield(S,level1,...,levelN,field,value)
S = setfield(S,structIndices,field,value)
S = setfield(S,structIndices,level1,...,levelN,field,value)
S = setfield(S,structIndices,level1,level1Indices,...,levelN,levelNIndices,field,value)
S = setfield(___,field,fieldIndices,value)

Описание

пример

S = setfield(S,field,value) присваивает значение заданному полю структуры 1 на 1 S. Например, S = setfield(S,'a',1) делает присвоение S.a = 1.

Если S не имеет заданного поля, то setfield добавляет его и присваивает value ему.

пример

S = setfield(S,level1,...,levelN,field,value) присваивает значение заданному полю вложенной структуры. Во вложенной структуре значение поля может быть другой структурой. Например, S = setfield(S,'a','b','c',1) делает присвоение S.a.b.c = 1, где поля S.a и S.a.b являются также структурами на первых и вторых уровнях вложения.

пример

S = setfield(S,structIndices,field,value) задает элемент S с помощью массива ячеек structIndices, когда S является массивом структур. Например, S = setfield(S,{3},'a',1) делает присвоение S(3).a = 1, где S(3) является третьим элементом S.

S = setfield(S,structIndices,level1,...,levelN,field,value) задает поле вложенной структуры, когда S является массивом структур. Например, S = setfield(S,{3,4},'a','b','c',1) делает присвоение S(3,4).a.b.c = 1.

пример

S = setfield(S,structIndices,level1,level1Indices,...,levelN,levelNIndices,field,value) задает элементы S, levelN и массивов структур, вложенных на любом промежуточном уровне, когда любые из структур могут быть нескалярными.

пример

S = setfield(___,field,fieldIndices,value) присваивает элементы value к элементам массива, сохраненного в field и заданного fieldIndices. Можно использовать этот синтаксис с вложенными уровнями и индексами массива структур, заданными в любом из предыдущих синтаксисов.

Примеры

свернуть все

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

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

Присвойте значение полю с помощью функции setfield.

S = setfield(S,'title','y = sin(x)')
S = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

Добавьте другое значение к S. Если вы задаете поле, которое не существует, то setfield добавляет его.

e = sqrt(abs(S.y));
S = setfield(S,'sqrty',e)
S = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'
    sqrty: [1x100 double]

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

S.a.b.c = 1;
S.a.b.d = 2;
S.a.b.e = struct('f',[3 4],'g',5);
S.h = 50
S = struct with fields:
    a: [1x1 struct]
    h: 50

В то время как S является структурой, полями S.a, S.a.b, и S.a.b.e является также структурами.

S.a
ans = struct with fields:
    b: [1x1 struct]

S.a.b
ans = struct with fields:
    c: 1
    d: 2
    e: [1x1 struct]

S.a.b.e
ans = struct with fields:
    f: [3 4]
    g: 5

Присвойте значение S.a.b.d с помощью функции setfield. Когда вы задаете список, разделенный запятыми вложенных имен структуры, включаете имена структуры в каждый уровень между верхней частью и именем поля, вы задаете. В этом случае списком, разделенным запятыми имен структуры является 'a','b', и именем поля является 'd'.

S = setfield(S,'a','b','d',1024);
S.a.b
ans = struct with fields:
    c: 1
    d: 1024
    e: [1x1 struct]

Также можно использовать точечный синтаксис, чтобы присвоить значение.

S.a.b.d = 2048;
S.a.b
ans = struct with fields:
    c: 1
    d: 2048
    e: [1x1 struct]

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

Во-первых, создайте массив структур. Как во всех массивах структур, каждый элемент является структурой с теми же полями.

S.x = linspace(0,2*pi);
S.y = sin(S.x);
S(2).x = S.x;
S(2).y = cos(S(2).x)
S = 1x2 struct array with fields:
    x
    y

Также можно присвоить значения с помощью setfield. Если поле не существует, setfield добавляет его. Добавьте поле под названием title к S.

S = setfield(S,{1},'title','y = sin(x)');
S = setfield(S,{2},'title','y = cos(x)')
S = 1x2 struct array with fields:
    x
    y
    title

Функция setfield присваивает значение полю отдельного элемента, но выходным аргументом является целый массив структур.

Отобразите первый элемент S.

S(1)
ans = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x)'

Присвойте значение полю вложенной структуры, в которой структуры на некоторых уровнях являются массивами структур. В этом примере S 1 2 массив структур. Второй элемент, S(2), имеет вложенную структуру a.b, где b 1 3 массив структур.

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

S.a = 1;
S(2).a.b = struct('d',{5,10,20});
S
S = 1x2 struct array with fields:
    a

S(2).a.b
ans = 1x3 struct array with fields:
    d

Отобразите третий элемент S(2).a.b a, B .

S(2).a.b(3)
ans = struct with fields:
    d: 20

Присвойте новое значение полю d S(2).a.b(3) с помощью функции setfield. Отобразите структуру с обновленным полем.

S = setfield(S,{2},'a','b',{3},'d',3.1416);
S(2).a.b(3)
ans = struct with fields:
    d: 3.1416

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

S.a = [5 10 15 20 25]
S = struct with fields:
    a: [5 10 15 20 25]

Присвойте значения элементам S.a с помощью функции setfield. Чтобы присвоить значения конкретным элементам, задайте индексы после имени поля. Необходимо задать индексы в массиве ячеек. Однако задайте новые значения в массиве, тип данных которого совпадает с типом данных поля.

S = setfield(S,'a',{3:5},[0 -50 -100])
S = struct with fields:
    a: [5 10 0 -50 -100]

Также можно использовать точечный синтаксис и индексацию массива, чтобы присвоить значения тем же элементам.

S.a(3:5) = [20 40 80]
S = struct with fields:
    a: [5 10 20 40 80]

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

свернуть все

Введите массив структур. Если S является нескалярным, то каждый элемент S является структурой, и все элементы имеют те же поля с теми же именами.

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

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

Индексы в массив структур, заданный как массив ячеек, содержащий целые числа или логические значения.

Пример: Если S (2,3).a = 2, то задайте structIndices как {2,3}, чтобы получить доступ к структуре в S (2,3).

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

level1 структуры является полем S, и также является структурой на первом уровне вложения. Структура levelN является структурой в N th уровень вложения. Необходимо задать имена структур на всех уровнях между S и levelN. Входной параметр field является полем levelN.

Пример: Если S.a.b.c = 1, то список, 'b' задает две структуры, вложенные под S с c быть полем структуры b.

Индексы, задающие элемент вложенного массива структур в N th уровень, заданный как массив ячеек, содержащий целые числа или логические значения.

Во вложенной структуре структура на любом уровне может быть массивом структур. Если структура, заданная levelN, является массивом структур, то levelNIndices задает элемент levelN.

Пример: Если S.a (2).b (3).c = 2, то задайте level1Indices как {2} и level2Indices как {3} для доступа S.a (2).b (3).

Индексы в поле, заданное как массив ячеек, содержащий целые числа, области значений или логические значения.

Чтобы индексировать во все элементы массива, сохраненного в поле, задайте fieldIndices как {':'}.

Пример: Если S.a = [5 10 20 40], то задайте fieldIndices как {2:4}, чтобы получить доступ к вторым, третьим, и четвертым элементам массива.

Советы

  • Обычно, более просто присвоить значения полям с помощью точечного синтаксиса, а не функции setfield. Используйте setfield для:

    • Старайтесь не создавать ненужные временные переменные.

    • Присвойте значения полям вложенных структур.

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

Была ли эта тема полезной?