8

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

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

当然,我不想松开不在的字段old_structnew_values所以我不能使用简单的old_struct=new_values.

更新结构是我们可能希望在解释器中用一行短行完成的事情。

4

1 回答 1

6

由于您确信没有更简单的方法可以实现您想要的,这里是Loren Shure 的文章中描述的方法(请参阅 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);

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

于 2013-03-06T21:03:02.727 回答