2013-05-08 24 views
0

我有包含的值,並且被定義爲嵌套結構:索引過的所有值在嵌套結構

mystruct.level1.a = 1; 
mystruct.level1.b = 2; 
mystruct.level2.a = 8; 
mystruct.level2.b = 9; 

我想在Level1和Level2的元素執行操作。我想要做的是訪問level1和level2中的值,將它們放入一個向量中,而不引用嵌套的字段名稱。

E.g.我想這樣做:

level1_vector = [mystruct.level1] 

,我想輸出:

level1_vector = [1 2] 

我怎樣才能做到這一點?

回答

1

使用以下兩種功能的組合:

cell2mat(struct2cell(mystruct.level1))

+0

什麼功能你是我的英雄,感謝 – jessems 2013-05-08 20:06:09

+0

我怎麼會去有關返回的所有值?例如。在這種情況下返回[1 8]。 – jessems 2013-05-08 20:34:22

+0

我確信使用'structfun','arrayfun'或'cellfun'函數可以更直接地實現這一點,但現在我想到的就是以下三行代碼:'c = struct2cell(mystruct); d = [c {:}];答案= [d.a];' – Bee 2013-05-09 01:14:39

0

有一個structfun來做到這一點。它將返回另一個具有相同名稱的結構。因此,對於您的情況:

con_struct = structfun (@(x) [x.a x.b], mystruct, "UniformOutput", false); 

現在,con_struct將有相同的字段mystruct,但不是一個結構,他們每個人是你想要的值的數組。您可以重新送入每個陣列您要

structfun (@foo, con_struct)