在MATLAB中为结构数组的字段赋值

在MATLAB中为结构数组的字段赋值,matlab,Matlab,我想替换结构数组中字段的值。例如,我想在以下构造中将所有1替换为3 a(1).b = 1; a(2).b = 2; a(3).b = 1; a([a.b] == 1).b = 3; % This doesn't work and spits out: % "Insufficient outputs from right hand side to satisfy comma separated % list expansion on left hand side. Missing [] are

我想替换结构数组中字段的值。例如,我想在以下构造中将所有1替换为3

a(1).b = 1;
a(2).b = 2;
a(3).b = 1;

a([a.b] == 1).b = 3; % This doesn't work and spits out:
% "Insufficient outputs from right hand side to satisfy comma separated
% list expansion on left hand side.  Missing [] are the most likely cause."

这有一个简单的语法吗?对于这样简单的操作,我希望避免丑陋的for循环。

您可以使用
单元格
符号检索数组中每个结构的字段值

bVals = {a.b};
bVals = cell2mat( bVals );

好吧,在向结构数组中插入值时不能做同样的事情。您必须使用循环。

积分转到@Slayton,但实际上您也可以使用以下方法为赋值执行相同的操作:

因此,细分如下:

[a.b]
检索数组
a
的所有
b
字段,并将其放入数组中

a([a.b]==1)

使用逻辑索引仅索引满足约束的
a
元素。随后,上面的full命令将值
3
分配给结果的逗号分隔列表中的所有元素,根据。

您实际上可以使用以下方法插入值:
[a([a.b]==1.b]=deal(3)
@guntherstruy如果您的答案很好的话。但是,把最初的回答当作答案是没有意义的。你能把它作为一个单独的回复(其他人)吗?
a([a.b]==1)