Заявление
[A(1).B.var1] = x{:};
является сокращением для
[A(1).B.var1] = deal(x{:});
(см. Документацию для deal
).
Таким образом, вы также можете написать
[A(1).B.var1] = deal(3,4);
Мне неизвестен какой-либо другой способ присвоения различных значений полю в массиве структуры в одной команде.
Если ваши значения находятся в числовом массиве, вы можете легко преобразовать его в массив ячеек, используя num2cell
(что проще, чем mat2cell
, который вы нашли).
data = [3,4];
tmp = num2cell(data);
[A(1).B.var1] = tmp{:};
В общем случае массивы struct довольно неудобны для использования в подобных случаях. Если вы можете, я бы порекомендовал вам хранить ваши данные в обычных числовых массивах, которые облегчают манипулирование многими элементами одновременно. Если вы настаиваете на использовании массива структуры (что удобно в определенных ситуациях), просто используйте цикл for:
data = [3,4];
for ii = 1:length(A(1).B)
A(1).B(ii).var1 = data(ii);
end
Другой альтернативой является использование table
.