我试图将一个结构数组传递给另一个没有成功。
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
我想让 Shai 的这个建议更明显,因为它更容易阅读。
[q.f] = s.f
虽然我会说@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
_1x1 struct
s(1).f