Одновременно присваивать значения нескольким полям структуры - PullRequest
6 голосов
/ 27 октября 2011

У меня есть структура matlab, которая соответствует следующей схеме:

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

Я хотел бы присвоить значения одному полю данных (скажем, data3) из всех полей одновременно. Это будет семантически похоже на:

S.*.data3 = value

Где подстановочный знак "*" представляет все поля (field1,...,fieldM) в структуре. Это то, что можно сделать без цикла в Matlab?

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

Поскольку field1 .. fieldM являются структурными массивами с одинаковыми полями, почему бы не создать массив struct для «поля»? Затем вы можете легко установить для всех членов «data» определенное значение, используя сделку.

field(1).data1 = 1;
field(1).data2 = 2;
field(2).data1 = 3;
field(2).data2 = 4;

[field.data1] = deal(5);
disp([field.data1]);
3 голосов
/ 27 октября 2011

Решение на основе петель может быть гибким и легко читаемым:

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
0 голосов
/ 27 октября 2011

В простых случаях вы можете сделать это путем преобразования вашей структуры в массив ячеек, используя struct2cell(). Поскольку у вас есть вложенная структура, я не думаю, что это сработает здесь.

С другой стороны, есть ли причина, по которой ваши данные структурированы следующим образом. Ваше описание создает впечатление, что более подходящим будет простой массив MxN или массив ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...