我试图将结构数组传递给另一个但没有成功。
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
。
我错过了什么吗?
答案 0 :(得分:2)
q = arrayfun( @(x,y) setfield( x, 'f', y.f ), q, s );
显然setfield
仅用于在struct数组中设置一个struct元素 - 因此arrayfun
。
修改强>
由Dan给出的更好的答案。
答案 1 :(得分:2)
您可以将结构数组的每个字段直接分配给单元格数组,然后可以使用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{:};
Here is a good article on this sort of thing
修改强> 或者Shai指出你可以去
[q.f] = s.f
答案 2 :(得分:1)
我想让Shai的这个建议更加明显,因为它更容易阅读。
[q.f] = s.f
答案 3 :(得分:1)
虽然我说@Dan's answer对于这个问题来说非常正常,但我想提出一个替代方案:
userC = result.toArray().toString();
虽然比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