有没有办法在一行中获得子字段的所有结构子字段值?像这样:
struct.field(1:end).field
答案 0 :(得分:1)
aStruct.subField = struct('subSubField', {1;2;3;4})
那样
aStruct.subField(1).subSubField == 1
aStruct.subField(1).subSubField == 2
等。然后叶子节点的值可以通过单行获得
valueLeafs = [aStruct.subField.subSubField];
可以通过assert(all(valueLeafs == [1,2,3,4]))
查看。
当叶节点值是非标量的时,上述单行也可以工作,以便它们可以水平连接。例如
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
和棘手的匿名函数通常会提供所需的索引技术:
dStruct.subField = struct('subSubField', {[1;2];'myString'});
valueLeafs_d = arrayfun(@(x) x.subSubField, dStruct.subField, 'UniformOutput', false)
答案 1 :(得分:0)
如果我理解你的问题,你想要将名为'field'的二级结构的所有字段收集到一个输出数组中。它不完全符合您对单线的要求,但您可以这样做:
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]