在没有'fieldnames'的情况下迭代MATLAB中的结构

unn*_*eay 7 matlab struct loops simulink matlab-coder

在MATLAB中迭代结构数据类型的常用方法是使用以下fieldnames()函数:

mystruct = struct('a',3,'b',5,'c',9);

fields = fieldnames(mystruct);

for i=1:numel(fields)
  mystruct.(fields{i});
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,这总是生成单元格数据类型,我想在SIMULINK中使用这种迭代来进行Matlab功能块,因为代码生成原因不允许单元格数据类型.

有没有办法在不同时使用单元数据类型的情况下迭代结构?

在Octave中有一种简洁的方法,在https://www.gnu.org/software/octave/doc/interpreter/Looping-Over-Structure-Elements.html中有解释.

for [val, key] = mystruct
  # do something esp. with 'key'
end
Run Code Online (Sandbox Code Playgroud)

有没有人在MATLAB中知道类似的方法?

Sam*_*rts 3

使用 MATLAB Coder 或 Simulink Coder 生成代码时,不仅不允许使用元胞数组,而且还不允许使用动态名称引用结构体的字段。

由于您无法使用动态名称,因此您可能应该多次重复循环体的内容,每个字段名称重复一次,您会提前知道(因为您没有使用动态名称)。

尽管从编程的角度来看这可能很麻烦,但我猜当您从中生成代码时,无论如何它可能会稍微快一些,因为代码生成过程可能应该展开循环。