2013-05-08 31 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)