通过Matlab中的另一个结构更新struct

时间:2013-03-06 10:45:17

标签: matlab struct

我想知道是否有一种方便的方法来使用Matlab中另一个结构的值更新结构。 以下是代码,使用fieldnamesnumelfor循环,

fn = fieldnames(new_values);
for fi=1:numel(fn)
    old_struct.(fn{fi}) = new_values.(fn{fi});
end

当然,我不想丢失old_struct中不在new_values内的字段,因此我无法使用简单的old_struct=new_values

我们可能希望在解释器的一个短行中更新结构。

1 个答案:

答案 0 :(得分:6)

既然你确信没有更简单的方法来实现你想要的东西,这里有Loren Shure's article中描述的方法(参见Dan评论中的链接),适用于你的例子:

%// Remove overlapping fields from first struct
s_merged = rmfield(s_old, intersect(fieldnames(s_old), fieldnames(s_new)));

%// Obtain all unique names of remaining fields
names = [fieldnames(s_merged); fieldnames(s_new)];

%// Merge both structs
s_merged = cell2struct([struct2cell(s_merged); struct2cell(s_new)], names, 1);

请注意,这个稍微改进的版本可以处理结构数组,以及具有重叠字段名称的结构(我相信你称之为 collision )。