8

Matlab で構造体を別の構造体の値で更新する便利な方法があるかどうか疑問に思っています。とループを使用fieldnamesしたコードは次のとおりです。numelfor

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 行で実行したい場合があります。

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 に答える