同时为多个结构字段分配值

时间:2011-10-26 20:53:51

标签: matlab

我有一个遵循以下模式的matlab结构:

S.field1.data1
          ...
 .field1.dataN
   ...
 .fieldM.data1
          ...
 .fieldM.dataN

我想同时从所有字段为一个数据字段(例如data3)分配值。这在语义上类似于:

S.*.data3 = value

通配符"*"表示结构中的所有字段(field1,...,fieldM)。这是否可以在没有matlab循环的情况下完成?

3 个答案:

答案 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数组或单元格数组更合适。