假设我们有一个结构v,其对象中有可变数量的元素
>> v(1).a = 1:10;
>> v(2).a = 1:20;
>> v(3).a = 1:30;
现在,如果我们想将它放入一个单元格数组中,我们可以简单地连接,我们将有一个带有3个单元格的a
>> c = {v(1).a,v(2).a,v(3).a}
c =
[1x10 double] [1x20 double] [1x30 double]
我们可以使用
访问单元格内的任何元素c{i}(j)
但现在例如,如果我必须在for循环中动态填充相同的数组
c = v(1).a
for i= 2:numel(v)
c= {c ,v(i).a};
end
对于前2次迭代,它的工作方式与c = {v(1).a,v(2).a}
c =
[1x10 double] [1x20 double]
但在第3次迭代后,它将前两个数组转换为带有单元格的单元格
c =
{1x2 cell} [1x30 double]
怎么能避免这个?而是像第一种情况一样,使用for循环
创建一个数组的单元格答案 0 :(得分:3)
尝试创建c
作为单元格数组,然后将单元格数组附加到其中:
c = {v(1).a}
for i = 2:numel(v)
c = [c, {v(i).a}];
end
或更简单的初始化:
c = {};
for i = 1:numel(v)
c = [c , {v(i).a}];
end
但是,您可以使用单行代码更简单地执行此操作:
c = { v.a }
最后一个解决方案是MATLAB“逗号分隔列表”,是构建数组和单元数组的便捷方法。
如果您在命令行中键入v.a
,则会看到返回三个答案(即v(1).a
,v(2).a
,v(3).a
)。通过写{ v.a }
,它相当于写出这三个答案,用逗号分隔,即相当于{v(1).a, v(2).a, v(3).a}
。
答案 1 :(得分:1)
我会推荐这种方法:
c = {};
for i = 1:numel(v)
c{end+1} = v(i).a;
end
或
c = {};
for i = 1:numel(v)
c(end+1) = {v(i).a};
end
我怀疑(based on this answer)将比Justin提出的连接方法更快。