使用另一个结构体更新Matlab中的结构体

8
我想知道在Matlab中是否有一种便捷的方法用另一个结构体的值来更新一个结构体。以下是代码,使用了fieldnamesnumel和一个for循环来实现。
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
我们可能希望在解释器中用一行代码更新结构体。

4
http://blogs.mathworks.com/loren/2009/10/15/concatenating-structs/ - Dan
这些答案要么不相关(假设没有碰撞),要么使用相同的“for”循环+“fieldnames”方法。这往往证实了没有更简单的方法,但并没有给出清晰的证据 ;) - M1L0U
1个回答

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);

注意,这个稍微改进的版本可以处理结构体数组,以及具有重叠字段名称的结构体(我相信这就是你所说的碰撞)。

如果其中一个字段也是结构体,这仍然有效吗? - Leo
1
@Leo 我相信是的,但在这种情况下最好的方法是尝试并查看结果! :-) - Eitan T

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接