我有一个结构体向量,每个结构体都有一个字段 x
:
s1.x = 1;
s2.x = 2;
s3.x = 3;
S = [s1, s2, s3];
我想将给定向量X
中的值设置到S
中所有结构体的字段x
中,也就是说,我想向量化以下循环:
X = [97, 98, 99];
for i = 1 : length(S)
S(i).x = X(i);
end
这个可以吗?
我有一个结构体向量,每个结构体都有一个字段 x
:
s1.x = 1;
s2.x = 2;
s3.x = 3;
S = [s1, s2, s3];
我想将给定向量X
中的值设置到S
中所有结构体的字段x
中,也就是说,我想向量化以下循环:
X = [97, 98, 99];
for i = 1 : length(S)
S(i).x = X(i);
end
这个可以吗?
Xc = num2cell(X); %// convert X to cell array of numbers
[S.x] = Xc{:}; %// generate comma-separated list from cell array, and assign
对于Matlab 7.0之前的版本,第二行应该更改为此内容
[S.x] = deal(Xc{:}); %// generate comma-separated list from cell array, and assign
S = struct('x', {1 2 3})
S
已经存在,我想一次性从向量X
中替换所有的x
字段。 - MGA
[S.x] = X
不行呢?有时候这种向量化的东西对我来说就像巫术一样。 - MGAdeal
,因此只需这样做:[S.x] = Xc {:};
- rayryengXc {:}
是一个逗号分隔的列表。只需在中间转换为另一个数据结构即可完成。@Luis Mendo:可以删除deal
以获得更短的解决方案。 - Danieldeal
,但是对于单元数组,您可以省略它。我想这可能会节省一些时钟周期,但是deal
肯定更明确! - rayryengXc = num2cell(X);
[S.x(1:length(Xc))] = Xc{:};
- Willem