В этом примере показано, как получить доступ и обработать данные из нескольких элементов массива нескалярного массива структур:
Создайте структуру 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® возвращает данные из элементов в comma-separated list, которая отображается следующим образом:
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Для получения дополнительной информации смотрите: