Как получить доступ ко всем элементам поля массива структуры, вложенным в массив ячеек в MATLAB?
вот код, который создает пример массива ячеек для этого вопроса:
mycell = cell([5,1]);
for i = 1 : size(mycell)
mystruct = struct();
mycell{i} = mystruct;
mycell{i}.field1 = i;
end
Я ожидал mycell{:}.field1
делать то, что я хочу, но это дает ошибку. Я могу использовать следующее для цикла:
for i = 1 : size(mycell)
mycell{i}.field1
end
но я бы предпочел более простое или более элегантное решение, поскольку хочу использовать все элементы mycell.field1 как y-переменные в графике. Есть идеи?
1 ответов
два возможных решения:
первый:
если все структуры в массив ячеек имеют одинаковые поля, чем можно:
mycell = [ mycell{:} ]; % convert cell array to struct array
y = [ mycell(:).filed1 ]; % get the values
второй:
другой метод использует cellfun
y = cellfun( @(x) x.field1, mycell );
предполагая, что все mycell{ii}.filed1
являются скалярами, иначе вам нужно будет добавить 'UniformOutput', false
до cellfun
.
Примечание: в случае, если некоторые поля пустые ([]
) эти методы могут не работать ожидаемый.
одно маленькое замечание:
это не хорошая практика, чтобы использовать i
и j
как переменные в Matlab.