setfield

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

Синтаксис

S = setfield(S,field,value)
S = setfield(S,field1,...,fieldN,value)
S = setfield(S,idx,field1,...,fieldN,value)
S = setfield(S,idx,field1,idx1,...,fieldN,idxN,value)

Описание

пример

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

Как альтернатива setfield, используйте запись через точку: S.field = value. Запись через точку обычно более эффективна.

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

пример

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

пример

S = setfield(S,idx,field1,...,fieldN,value) указывает элемент S и присваивает значение одному из его полей. Например, S = setfield(S,{3,4},'a',1) делает присвоение S(3,4).a = 1.

пример

S = setfield(S,idx,field1,idx1,...,fieldN,idxN,value) указывает элементы полей. Например, S = setfield(S,'a',{2},1) делает присвоение S.a(2) = 1. Точно так же S = setfield(S,{3,4},'a',{2},'b',1) делает присвоение S(3,4).a(2).b = 1.

Примеры

свернуть все

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

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)'

Присвойте значение другому полю. Если вы задаете поле, которое не существует, то 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.title = 'y = sin(x), with error bar values'
S = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = sin(x), with error bar values'
    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 = setfield(S,{1},'title','y = sin(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(2).title = 'y = cos(x)';
S(2)
ans = struct with fields:
        x: [1x100 double]
        y: [1x100 double]
    title: 'y = cos(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.

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 является структурой, и все элементы имеют те же поля с теми же именами.

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

Индексы, заданные как массив ячеек числовых или логических значений. Индексы для S и полей 1 через N-1 указывают отдельные элементы массивов структур. Индексы для поля N указывают один или несколько элементов массива в том поле, которое может иметь любой тип.

Пример: S = setfield(S,{1,2},'a',1) эквивалентен S(1,2).a = 1.

Пример: Если S.a = [5 10 20], то S = setfield(S,'a',{[2,3]},[50 100]) эквивалентен S.a(2:3) = [50 100].

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

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