Matlab:迭代多个结构

时间:2016-08-24 18:29:46

标签: matlab for-loop struct

我有5个Matlab结构。我想迭代它们。我目前的解决方案如下:

all_structs = [struct1,struct2,struct3,struct4,struct5];
for single_struct = all_structs
    % do stuff to each struct here
end

但是,上面的每个结构都有一个包含大量数据的矩阵(包括一些其他属性)。此外,我在single_struct中所做的任何更改都不会传回原始struct

问题:我该如何解决?在创建向量all_structs时,Matlab是否会再次复制所有数据?或者是通过引用传递的每个结构(struct1,...,struct5)的数据?是否有更好的方法来迭代多个结构?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

struct不会通过引用传递。您需要使用索引遍历all_structs中的元素,然后使用该索引进行访问和修改。如果您需要将某些内容视为参考,则需要为其定义一个类,并使该类继承自handleSuggested reading

for i = 1:numel(all_structs)
    % do stuff to each struct here
    all_structs(i).data = ones(10,5); % your code here
end

我建议也可以阅读arrayfun,但如果您想要进行操作并获得结果,这是有用的。从您的描述中,您可能想要修改结构。

答案 1 :(得分:0)

如果您想要修改原始结构的内容而不进行复制,可以使用结构名称的单元格数组。
然后迭代名称,并使用eval修改内容 使用eval效率低下,所以不要习惯......

请参阅以下代码示例:

%Create sample structs (each struct has a data element).
struct1.data = 1;
struct2.data = 2;
struct3.data = 3;

%Create a cell array containing structs names as strings.
struct_names = {'struct1', 'struct2', 'struct3'};

%Iterate all structs names
%Modify data elements of each struct using eval.
for i = 1:length(struct_names)
    sname = struct_names{i}; %Get struct name from cell array.

    %Evaluate a string like: 'struct1.data = struct1.data + 1;'
    eval([sname, '.data = ', sname, '.data + 1;']);
end