exponenta event banner

Доступ к элементам массива нескалярной структуры

В этом примере показано, как получить доступ и обработать данные из нескольких элементов нескалярного структурного массива:

Создание структуры «1 за 3» s с полем f:

s(1).f = 1;
s(2).f = 'two';
s(3).f = 3 * ones(3);

Хотя каждая структура в массиве должна иметь одинаковое количество полей и одинаковые имена полей, содержимое полей может быть разных типов и размеров. При обращении к полю f для нескольких элементов массива структуры, таких как

s(1:3).f

или

s.f

MATLAB ® возвращает данные из элементов в списке, разделенном запятыми, который отображается следующим образом:

ans =
     1

ans =
     two

ans =
     3     3     3
     3     3     3
     3     3     3

Невозможно назначить список одной переменной с синтаксисом v = s.f потому что поля могут содержать различные типы данных. Однако элементы списка можно присвоить одному и тому же числу переменных, например:

[v1, v2, v3] = s.f;

или назначить элементам массива ячеек, например,

c = {s.f};

Если все поля содержат один и тот же тип данных и могут образовывать гиперректанг, можно объединить элементы списка. Например, создайте структуру nums со скалярными числовыми значениями в поле fи объедините данные из полей:

nums(1).f = 1;
nums(2).f = 2;
nums(3).f = 3;

allNums = [nums.f]

Этот код возвращает

allNums =
     1     2     3

Если требуется обработать каждый элемент массива одной и той же операцией, используйте команду arrayfun функция. Например, подсчитать количество элементов в поле f каждой структуры в массиве s:

numElements = arrayfun(@(x) numel(x.f), s)

Синтаксис @(x) создает анонимную функцию. Этот код вызывает numel функция для каждого элемента массива s, такие как numel(s(1).f), и возвращает

numElements =
     1     3     9

Для получения дополнительной информации см.: