我有一个遵循以下模式的matlab结构:
S.field1.data1
...
.field1.dataN
...
.fieldM.data1
...
.fieldM.dataN
我想同时从所有字段为一个数据字段(例如data3
)分配值。这在语义上类似于:
S.*.data3 = value
通配符"*"
表示结构中的所有字段(field1,...,fieldM)
。这是否可以在没有matlab循环的情况下完成?
答案 0 :(得分:4)
由于field1 .. fieldM是具有相同字段的结构数组,为什么不为“字段”创建结构数组?然后,您可以使用交易轻松地将所有“数据”成员设置为特定值。
field(1).data1 = 1;
field(1).data2 = 2;
field(2).data1 = 3;
field(2).data2 = 4;
[field.data1] = deal(5);
disp([field.data1]);
答案 1 :(得分:3)
基于循环的解决方案可以灵活且易于阅读:
names = strtrim(cellstr( num2str((1:5)','field%d') )); %'# field1,field2,...
values = num2cell(1:5); %# any values you want
S = struct();
for i=1:numel(names)
S.(names{i}).data3 = values{i};
end
答案 2 :(得分:0)
在简单的情况下,您可以通过使用struct2cell()
将结构转换为单元格数组来实现。由于你有一个嵌套的结构,我认为这不会起作用。
另一方面,您的数据是否有这样的结构是有原因的。您的描述给人的印象是简单的MxN数组或单元格数组更合适。