генерация динамической структуры в Matlab - PullRequest
3 голосов
/ 13 марта 2011

У меня есть список имен полей и я хочу создать вложенную структуру.Я попытался это сделать:

fn1 = {'a', 'b', 'c'};
fn2 = {'d', 'e', 'f'};
s = struct();
for n1=fn1
  for n2=fn2
    s.(n1).(n2) = 0 ;
  end
end

, но Matlab жалуется, что нотация ". {Fieldname)" предназначена только для ссылки на динамическую структуру ("Аргумент для ссылки на динамическую структуру должен вычислять действительное имя поля.").

Я знаю, что решение, которое работает, состоит в том, чтобы перебирать имена полей, используя isfield () и struct ().Итак, как я могу достичь этой цели без использования isfield () и struct (), например, с помощью некоторой анонимной функции и векторизации?Спасибо

1 Ответ

5 голосов
/ 13 марта 2011

Ваша основная проблема в том, что n1 и n2 - это массивы ячеек, которые не являются допустимыми именами структур. Таким образом, написание

s.(n1{1}).(n2{1}) = 0;

исправляет ошибку.

Однако лучшим способом может быть использование CELL2STRUCT для создания s:

s2 = cell2struct(cell(size(fn2(:))),fn2(:));
s = cell2struct(repmat({s2},size(fn1(:))),fn1(:))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...