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;