有没有办法在一行中得到一个子域的所有结构子域的值?如下所示:
struct.field(1:end).field 发布于 2012-03-15 18:27:46
如果我没理解错的话,您希望将第二级结构的所有字段收集到一个单独的输出数组中。它不能完全满足您对一行程序的要求,但您可以这样做:
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);
endresult的结束值为[1 3]
发布于 2012-03-15 19:13:35
简单的结构示例
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)https://stackoverflow.com/questions/9715581
复制相似问题