【问题标题】:update struct via another struct in Matlab [duplicate]通过 Matlab 中的另一个结构更新结构 [重复]
【发布时间】:2013-03-06 10:45:16
【问题描述】:

我想知道是否有一种方便的方法可以用 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

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

【问题讨论】:

标签: matlab struct


【解决方案1】:

既然您确信没有更简单的方法可以实现您想要的,这里是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)。

【讨论】:

  • 如果其中一个字段也是结构体,这仍然有效吗?
  • @Leo 我相信是这样,但在这种情况下,最好的方法是试试看! :-)
猜你喜欢
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多