如何将struct数组传递给另一个struct数组?

时间:2013-02-28 10:31:27

标签: arrays matlab struct

我试图将结构数组传递给另一个但没有成功。

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

我错过了什么吗?

4 个答案:

答案 0 :(得分:2)

arrayfun

怎么样?
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