简体   繁体   中英

Summing specific fields in Matlab

How do I sum different fields? I want to sum all of the information for material(1) ...so I want to add 5+4+6+300 but I am unsure how. Like is there another way besides just doing material(1).May + material(1).June etc....

 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;

You can use structfun for this:

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

The inner portion ( structfun(@(x)x, material(1)) ) runs a function each individual field in the structure, and returns the results in an array. By using the identity function ( @(x)x ) we just get the values. sum of course does the obvious thing.

A slightly longer way to do this is to access each field in a loop. For example:

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

For some users this will be easier to read, although for expert users the first will be easier to read. The result and (approximate) performance are the same.

我认为Pursuit的答案非常好,但是这是我的首要选择:

sum( cell2mat( struct2cell( material(1) )));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM