实际上,我不认为我正在尝试做的事情是必要的。让我解释一下,以防其他人走上同一条路。
上面的动机是我想从结构数组中的所有结构中提取某个子字段,并以逗号分隔列表的形式:
myStruc(1).fieldX.subfieldA, ...
myStruc(2).fieldX.subfieldA, ...
myStruc(3).fieldX.subfieldA
我知道我可以通过 myCellArray{:} 将所有单元格索引到一维单元格数组中来生成一个逗号分隔的列表。
但是,我发现实际上有一个名为“逗号分隔列表”的完整帮助页面显示结构的行为方式相同。所以上面的逗号分隔列表等于 myStruc(:).fieldX.subfieldA。
事实上,将 struct 数组转换为元胞数组是行不通的,因为在元胞数组的花括号索引之后,您不能使用点索引来访问字段。例如,如果有一种矢量化方式将 myStruct(i) 转换为 myCell(i),我希望能够生成
myCellArray{1}.fieldX.subfieldA, ...
myCellArray{2}.fieldX.subfieldA, ...
myCellArray{3}.fieldX.subfieldA
通过表达式 myCell{:}.fieldX.subfieldA。花括号后的点索引是语法错误。
经验教训:直接使用结构数组索引来启用对结构字段和子字段的访问。
***** 警告 *****
我只测试了使用多级点索引结合标量数字数组索引生成逗号分隔列表,例如 myCellArray{2}.fieldX.subfieldA。当使用向量数字索引代替标量值 2 时,它不起作用,即 Matlab 无法处理 myCellArray{:}.fieldX.subfieldA 或 myCellArray{2:3}.fieldX.subfieldA。
哦,好吧。 :(