exponenta event banner

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

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