В этом примере показано, как получить доступ и обработать данные от нескольких элементов нескалярного массива структур:
Создайте 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
из каждого struct в массиве s
:
numElements = arrayfun(@(x) numel(x.f), s)
Синтаксис @(x)
создает анонимную функцию. Этот код вызывает numel
функция для каждого элемента массива s
, такой как numel(s(1).f)
, и возвращается
numElements = 1 3 9
Для сопутствующей информации см.: