我有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
)的数据?是否有更好的方法来迭代多个结构?
感谢您的帮助!
答案 0 :(得分:3)
struct
不会通过引用传递。您需要使用索引遍历all_structs
中的元素,然后使用该索引进行访问和修改。如果您需要将某些内容视为参考,则需要为其定义一个类,并使该类继承自handle
。 Suggested 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