首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MATLAB -> struct.field(1:end).field?

MATLAB -> struct.field(1:end).field?
EN

Stack Overflow用户
提问于 2012-03-15 15:36:23
回答 2查看 1.6K关注 0票数 1

有没有办法在一行中得到一个子域的所有结构子域的值?如下所示:

代码语言:javascript
复制
struct.field(1:end).field 
EN

回答 2

Stack Overflow用户

发布于 2012-03-15 18:27:46

如果我没理解错的话,您希望将第二级结构的所有字段收集到一个单独的输出数组中。它不能完全满足您对一行程序的要求,但您可以这样做:

代码语言:javascript
复制
a.field1.a = 1;
a.field1.b = 2;
a.field2.a = 3;
a.field2.b = 4;

result = [];
for x = fieldnames(a)'
     result = horzcat(result, a.(x{:}).a);
end

result的结束值为[1 3]

票数 1
EN

Stack Overflow用户

发布于 2012-03-15 19:13:35

简单的结构示例

代码语言:javascript
复制
aStruct.subField = struct('subSubField', {1;2;3;4})

所以

代码语言:javascript
复制
aStruct.subField(1).subSubField == 1
aStruct.subField(1).subSubField == 2

等。然后,叶节点的值可以通过单行获得,例如

代码语言:javascript
复制
valueLeafs = [aStruct.subField.subSubField];

可以通过assert(all(valueLeafs == [1,2,3,4]))进行检查。

非标量结构示例

当叶节点值是非标量的,以便它们可以水平连接时,上面的一行程序也可以工作。例如

代码语言:javascript
复制
bStruct.subField = struct('subSubField', {[1,2];[3,4]})
valueLeafs_b     = [bStruct.subField.subSubField]; % works okay
cStruct.subField = struct('subSubField', {[1,2];[3;4]})
valueLeafs_c     = [cStruct.subField.subSubField]; % error: bad arg dims

不同的类结构示例

前面给出的单行解决方案在叶节点值不同的类时不起作用,因为它们通常不能连接在一起。但是,使用arrayfun和一个棘手的匿名函数通常会提供所需的索引技术:

代码语言:javascript
复制
dStruct.subField = struct('subSubField', {[1;2];'myString'});
valueLeafs_d     = arrayfun(@(x) x.subSubField, dStruct.subField, 'UniformOutput', false)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9715581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档