Arrays 如何将一个结构数组传递给另一个结构数组?

Arrays 如何将一个结构数组传递给另一个结构数组?,arrays,matlab,struct,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 我错过什么了吗?怎么样 显然,它只用于在struct数组中设置一个struct元素,因此arrayfun 编辑: 一个更好的答案是。您可以将结构数组的每个字段直接指定给单元格数组,然

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

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

我错过什么了吗?

怎么样

显然,它只用于在struct数组中设置一个struct元素,因此
arrayfun

编辑:

一个更好的答案是。

您可以将结构数组的每个字段直接指定给单元格数组,然后使用
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{:};

编辑: 或者正如你所指出的,你可以直接去

[q.f] = s.f

我想让Shai的这个建议更明显,因为它更容易阅读

[q.f]=s.f

虽然我认为这是一个非常经典的问题,但我想提出一个替代方案:

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结构返回
等于
s(1).f

当您在执行此操作时,为什么不将
[q.f]=s.f
?谢谢大家的帮助!Shai的编辑工作很棒。但是您使用
deal
命令的建议不起作用。错误消息是:“左侧括号内有c{:},这要求定义c,以便可以计算出预期结果的数量”@Massoud“[q.f]=s.f有什么问题?”[q.fNew]=s.fNew;'?如果这是一个新问题,那么就把它贴出来。谢谢,是的,我现在同意了!
s.f
的计数也相同,它还提供了一个逗号分隔列表(CSL)。lhs上的
[]
与rhs上的CSL相结合,是自Matlab版本7以来
deal()
命令的替换语法。@Dan@Shai值得注意的是
[q.f]=s.f
符号仅在
q
预先分配到正确大小时才起作用。如果之前未定义
q
,此方法将只将
q
定义为
s(1)。f
在不知道“f”和多个字段(如“f”)的名称的情况下是否可以应用此方法?因此,将所有字段从s添加到q?@Leo您可以使用
fieldnames
在所有字段上应用“仅从循环”方法。
s(1).f = (1:3);
s(2).f = (4:6);
s(3).f = (7:9);

[q.f] = s.f;