2017-08-08 80 views
-1

想象您有一个单元格阵列“测试”,具有不同大小的两个维度“e”和“f”。是否有可能将一维转换为一个结构,而另一个转换为子结构?它适用于Loop,但我不喜欢Loops。因为我无法安排与[...]阵列结构是空的。将单元格转换为空的嵌套结构

StrA.SubA.SubSubA=struct('SubSubSubA',[],'SubSubSubB',[]); 
count_e=4; 
count_f=2; 
for e=1:count_e 
    for f=1:count_f 
    StrA.SubA(e,1).SubSubA(f,1).SubSubSubA=test{e,f}; 
    end 
end 

在此先感谢

+0

为什么你不喜欢循环..如果它的工作,我没有看到的重点.. – Jepessen

+1

如果你不是循环迷,那么我会避免双重嵌套的结构。这太慢/不适用或仅仅是语法偏好?如果是后者,可能只是继续 – Wolfie

+0

当尺寸的长度增加时,循环变得很慢。这是重要的一点。但是我也认为具有较少结构化数据库的解决方案更容易处理。也感谢gnovice。 – Schladde

回答

1

你可以做到这一点,而无需使用structnum2cell循环,和一对夫妇的transposes

test = num2cell(rand(4, 2)); % Sample 4-by-2 cell array of random data 
StrA = struct('SubA', struct('SubSubA', num2cell(struct('SubSubSubA', test, ... 
                 'SubSubSubB', []).', 1)).'); 

虽然我不知道这是否是任何更快或比基于循环的解决方案更具可读性。

我还应该注意,在基于环路的解决方案中,只有子结构StrA.SubA(1).SubSubA(1)StrA.SubA(1).SubSubA(2)将具有SubSubSubB字段。 StrA.SubA(2:4)中的所有其他子结构将仅包含字段SubSubSubA