matlab - 我是否总是需要使用元胞数组为结构数组分配多个值?
问题描述
我有一个嵌套的结构数组,比如
A(1).B(1).var1 = 1;
A(1).B(2).var1 = 2;
现在我想将值更改为对每个相应值var1
使用向量的元素。x = [3; 4]
结果应该是
A(1).B(1).var1 = 3;
A(1).B(2).var1 = 4;
我努力了
% Error : Scalar structure required for this assignment.
A(1).B.var1 = x;
% Error : Insufficient number of outputs from right hand side of equal sign to satisfy assignment.
[A(1).B.var1] = x(:);
奇怪的是,如果 x 是一个元胞数组,则第二种语法有效
x = {3, 4};
[A(1).B.var1] = x{:};
幸运的是,使用 将我的数字向量转换为元胞数组并不太复杂mat2cell
,但这是在没有 for 循环的情况下进行此分配的唯一方法吗?
对嵌套结构数组进行多次赋值的正确语法是什么?我可以使用数字向量还是必须使用元胞数组?
解决方案
该声明
[A(1).B.var1] = x{:};
是简写
[A(1).B.var1] = deal(x{:});
(请参阅文档deal
)。
因此你也可以写
[A(1).B.var1] = deal(3,4);
我不知道有任何其他方法可以在单个命令中为结构数组中的字段分配不同的值。
如果您的值在数值数组中,您可以使用num2cell
(这比mat2cell
您找到的更简单)轻松地将其转换为元胞数组。
data = [3,4];
tmp = num2cell(data);
[A(1).B.var1] = tmp{:};
一般来说,结构数组在这种情况下使用起来相当尴尬。如果可以,我建议您将数据存储在普通数值数组中,这样可以更轻松地同时操作多个元素。如果您坚持使用结构数组(这在某些情况下很方便),只需使用 for 循环:
data = [3,4];
for ii = 1:length(A(1).B)
A(1).B(ii).var1 = data(ii);
end
另一种选择是使用table
.
推荐阅读
- c++ - 未处理的异常 C++ SFML
- python - 多选表单和查询 django
- c# - JSON Schema 条件结果
- apache - 带有两个正斜杠(不是双斜杠)的 Htaccess 重定向 URL 将不起作用
- javascript - Gulp watch 不看 .js 文件
- javascript - Heroku 在我的本地服务器上运行时崩溃
- sonarqube - 在日志中显示“加载活动规则(完成)”后,声纳扫描仪挂起
- python - 如何在 Django 的基于类的视图中使用帖子保存表单时保存用户
- php - 通过 AJAX 成功回显数据对象中返回的单个变量
- html - 导航项目不显示