setfield

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

Описание

пример

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=1×2 struct array with fields:
    x
    y

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

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

The 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=1×2 struct array with fields:
    a

S(2).a.b
ans=1×3 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