我有一个嵌套结构数组,例如
A(1).B(1).var1 = 1;
A(1).B(2).var1 = 2;
现在我想改变的值var1
使用向量的元素x = [3; 4]
对于每个相应的值。
结果应该是
A(1).B(1).var1 = 3;
A(1).B(2).var1 = 4;
我努力了
% Error : Scalar structure required for this assignment.
A(1).B.var1 = x;
% Error : Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
[A(1).B.var1] = x(:);
奇怪的是,如果 x 是元胞数组,则第二种语法有效
x = {3, 4};
[A(1).B.var1] = x{:};
幸运的是,使用以下命令将我的数值向量转换为元胞数组并不太复杂mat2cell
,但是这是在没有 for 循环的情况下完成此分配的唯一方法吗?
对嵌套结构数组进行多重赋值的正确语法是什么?我可以使用数值向量还是必须使用元胞数组?
该声明
[A(1).B.var1] = x{:};
是简写
[A(1).B.var1] = deal(x{:});
(参见的文档deal).
因此你也可以写
[A(1).B.var1] = deal(3,4);
我不知道有任何其他方法可以在单个命令中为结构数组中的字段分配不同的值。
如果您的值位于数值数组中,您可以使用以下命令轻松地将其转换为元胞数组num2cell(这比mat2cell
你发现了)。
data = [3,4];
tmp = num2cell(data);
[A(1).B.var1] = tmp{:};
一般来说,结构数组在这种情况下使用起来相当尴尬。如果可以的话,我建议您将数据存储在普通的数值数组中,这样可以更轻松地同时操作多个元素。如果您坚持使用结构体数组(这在某些情况下很方便),只需使用 for 循环:
data = [3,4];
for ii = 1:length(A(1).B)
A(1).B(ii).var1 = data(ii);
end
另一种选择是使用table.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)