2013-10-18 87 views
2

如何求和不同的字段?我想總結材料(1)的所有信息...所以我想添加5 + 4 + 6 + 300,但我不確定如何。就像是有除了剛纔做材料(1)。可能+材料(1)。6月等....在Matlab中總結特定的字段

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; 
+0

可能重複。 com/questions/19344239 /訪問元素結構 - 跨場數組) – chappjc

回答

4

您可以使用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 

對於一些用戶來說,這將是更容易閱讀,但對於專業用戶,首先會更容易閱讀。結果和(近似)表現相同。

+0

+1。或者:'results = sum(structfun(@sum,material(1)))' –

+0

感謝您的回覆......有沒有偶然的事情比這更簡單? –

+2

IMO,'structfun'版本非常簡單。 –

0

我想追求的答案是非常好的,但這裏是我的頭頂部的替代方法://計算器:訪問一個結構的元素跨越場陣列(HTTP的

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