如何动态访问结构字段?

mar*_*ovm 32 matlab matlab-struct

我有一个具有许多字段的结构,这些字段是不同长度的向量.我想按顺序访问循环中的字段.我试过getfield如下,但MATLAB不喜欢这样.我怎样才能做到这一点?

S = struct('A', [1 2], 'B',[3 4 5]);
SNames = fieldnames(S);
for loopIndex = 1:2
  field = getfield(S, SNames(loopIndex));
  %do stuff w/ field
end
??? Index exceeds matrix dimensions
Run Code Online (Sandbox Code Playgroud)

我首先使用结构,因为数组会遇到不同字段长度的问题.还有更好的选择吗?

Mat*_*oug 44

尝试使用动态字段引用,将字符串放在括号中,如定义内容的行所示.

S = struct('A', [1 2], 'B',[3 4 5]); 
SNames = fieldnames(S); 
for loopIndex = 1:numel(SNames) 
    stuff = S.(SNames{loopIndex})
end 
Run Code Online (Sandbox Code Playgroud)

我同意史蒂夫和亚当的观点.使用细胞.这种语法适合其他情况下的人!


gno*_*ice 16

我想在这里提出三点:


Ada*_*erg 5

getfield方法是可以的(虽然我现在没有MATLAB可用,但我不清楚为什么上面的方法不起作用).

对于替代数据结构,您可能还需要查看MATLAB单元阵列.它们还允许您存储和索引不同长度的向量.