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

时间:2012-11-10 18:39:38

标签: 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 the most likely cause."

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

2 个答案:

答案 0 :(得分:5)

积分转到@Slayton,但你实际上也可以使用deal来分配值:

[a([a.b]==1).b]=deal(3)

所以分解:

[a.b]

检索数组b的所有a字段,并将此comma-separated-list放入数组中。

a([a.b]==1)

使用逻辑索引仅索引满足约束的a元素。随后,上面的完整命令会根据this将值3分配给生成的逗号分隔列表的所有元素。

答案 1 :(得分:1)

您可以使用cell表示法检索数组中每个结构的字段值。

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

AFAIK,你不能把值插入到结构数组中。你必须使用一个循环。