首页 > 解决方案 > 我是否总是需要使用元胞数组为结构数组分配多个值?

问题描述

我有一个嵌套的结构数组,比如

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 循环的情况下进行此分配的唯一方法吗?

对嵌套结构数组进行多次赋值的正确语法是什么?我可以使用数字向量还是必须使用元胞数组?

标签: matlab

解决方案


该声明

[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.


推荐阅读