我想知道是否有一种方便的方法来使用Matlab中另一个结构的值更新结构。
以下是代码,使用fieldnames
,numel
和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
。
我们可能希望在解释器的一个短行中更新结构。
答案 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 )。