1

我确实有一个简单的问题,但它不适合我。我想预先分配一个包含许多字段的结构。我想像这样获得它:结构 S 1x30 和 30 个字段中的每一个都应该是一个 1x50 的结构(50 个条目中的一些整数,一些带有字符串的单元格,一些子数组)。这是否可以在不为 50 个字段中的每一个提供确切名称的情况下预先分配它?

干杯!

4

1 回答 1

2

必须命名 AFAIK 结构字段,但是,这些名称不需要硬编码。

例如,如果我有一个foo具有名为的字段的结构,bar我可以像这样访问该字段:

name = 'bar';
data = foo.(name);  % the same as data = getfield(data, name);

foo.(name)符号表示可以从变量(动态字段名称)中生成字段名称,文档可以在此处找到。此外,您可以使用它来创建字段。

name = 'bar'
for i = 1:10
  nameI = [bar, num2str(i)] ;
  foo.( nameI) = []; % the same as foo = setfield(foo, nameI, []);
end

该结构foo现在有 10 个名为bar1, bar2, ...的字段bar10

如果您绝对不想要名称而只想要索引,那么您可能想要的是一个元胞数组。元胞数组类似于常规的 matlab 向量,只是它们可以包含任何内容。

c = {'1234', 1234, [1 2 3 4],  [1 2; 3 4], @disp, {1 ,2, 3}};

例如c,一个元胞数组包含字符串、标量、向量、矩阵,然后是函数句柄,以及另一个元胞数组。

您可以使用花括号访问单个单元格的内容{}。所以 c{1}会返回'1234',而c{2}会返回一个数字。

您可以使用这些方法中的任何一种来预先分配适合您所描述的数据结构。

于 2012-08-09T20:08:23.280 回答