我试图传递一个结构体数组,但是没有成功。
s(1).f = (1:3);
s(2).f = (4:6);
s(3).f = (7:9);
q(1).n = 'nameA';
q(2).n = 'nameB';
q(3).n = 'nameC';
q(3).f = [];
q.f = s.f
不应修改字段n
。
我有遗漏什么吗?
deal
将结构体转换为单元格数组:s(1).f = (1:3);
s(2).f = (4:6);
s(3).f = (7:9);
q(1).n = 'nameA';
q(2).n = 'nameB';
q(3).n = 'nameC';
c = cell(3,1);
[c{:}] = deal(s.f);
[q.f] = c{:};
编辑: 或者正如Shai所指出的,你可以直接去
[q.f] = s.f
[q.f] = s.f
? - Shais.f
也是如此,它也提供逗号分隔列表(CSL)。在左手边的[]
与右手边的CSL相结合,是自Matlab 7版本以来deal()
命令的替换语法。 - Massoud[q.f] = s.f
表示法仅在 q
预先分配到正确的大小时才有效。如果 q
尚未定义,则此方法只会将 q
定义为 s(1).f
。 - sco1虽然我认为@Dan的回答对于这个问题非常权威,但我想提出一个替代方案:
s(1).f = (1:3);
s(2).f = (4:6);
s(3).f = (7:9);
[q(1:length(s)).f] = s.f;
[q.f] = s.f
语法稍微冗长,但它具有优点,即使q
未预先分配到正确的大小以复制s
,它也能按预期运行。s(1).f = (1:3);
s(2).f = (4:6);
s(3).f = (7:9);
[q.f] = s.f;
q.f
作为一个等于 s(1).f
的 1x1结构体
。[q.f] = s.f
fieldnames
循环所有字段即可。 - Shai