3

異なるフィールドを合計するにはどうすればよいですか? material(1) のすべての情報を合計したいので、5+4+6+300 を追加したいのですが、方法がわかりません。material(1).May + material(1).June などを実行する以外に別の方法があるようです....

 material(1).May= 5;
 material(1).June=4;
 material(1).July=6;
 material(1).price=300;
 material(2).May=10;
 material(2).price=550;
 material(3).May=90;
4

2 に答える 2

5

これに使用できますstructfun

result = sum(    structfun(@(x)x, material(1))    );

内側の部分 ( structfun(@(x)x, material(1))) は、構造体の個々のフィールドごとに関数を実行し、結果を配列で返します。恒等関数 ( @(x)x) を使用することで、値を取得するだけです。 sumもちろん、明らかなことをします。

これを行う少し長い方法は、ループ内の各フィールドにアクセスすることです。例えば:

fNames = fieldnames(material(1));
accumulatedValue = 0;
for ix = 1:length(fNames)
    accumulatedValue = accumulatedValue + material(1).(fNames{ix});
end
result = accumulatedValue

一部のユーザーにとってはこれの方が読みやすいでしょうが、エキスパート ユーザーにとっては最初の方が読みやすいでしょう。結果と (概算の) パフォーマンスは同じです。

于 2013-10-18T23:39:52.873 に答える
0

私は追求の答えは非常に良いと思いますが、ここに私の頭の上の代替案があります:

sum( cell2mat( struct2cell( material(1) )));
于 2013-10-19T02:55:24.723 に答える