2

我想替换结构数组中字段的值。例如,我想在以下构造中将所有 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 循环。

4

2 回答 2

5

归功于@Slayton,但实际上您也可以使用deal来分配值:

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

所以分解:

[a.b]

检索b数组的所有字段a并将此逗号分隔列表放入数组中。

a([a.b]==1)

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

于 2012-11-11T22:24:32.497 回答
1

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

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

AFAIK,你不能做同样的事情来将值插入到结构数组中。您必须使用循环。

于 2012-11-10T19:15:48.807 回答