【发布时间】:2014-08-08 17:19:17
【问题描述】:
在 MATLAB 中迭代结构数据类型的常用方法是使用 fieldnames() 函数,如下所示:
mystruct = struct('a',3,'b',5,'c',9);
fields = fieldnames(mystruct);
for i=1:numel(fields)
mystruct.(fields{i});
end
不幸的是,这总是会生成单元格数据类型,我想将这种迭代用于 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
有人知道 MATLAB 中的类似方法吗?
【问题讨论】:
-
我认为整洁的 Octave 功能在 Matlab 中没有等价物。如果您只需要对所有值运行一个函数,那么
structfun可以提供帮助。 -
更准确的说,我需要给
mystruct的值部分赋值一个向量,也就是将值3、5、9替换为[10、11、12],保持在例子。在这种情况下,我还不知道如何使用structfun语句来做到这一点。有什么提示吗?这可能是转换结构的第一步吗?是否存在用于将 1x1 结构转换为该 1x3 形式的简单函数(没有出现 {}!):struct('key',{'a','b','c'},'val',{3,5,9})? -
从 MATLAB R2015b 开始,此代码应该可以工作。添加了对
fieldnames的支持以及其他一些用于代码生成的元胞数组支持。
标签: matlab loops struct simulink matlab-coder