MATLAB 结构体数组赋值
Posted
技术标签:
【中文标题】MATLAB 结构体数组赋值【英文标题】:MATLAB Array of structures assignment 【发布时间】:2016-09-12 13:05:57 【问题描述】:我有一个结构数组。让我们说
s(1).value
,...,s(5).value
。
我有一个值向量,比如说vals = [1 2 3 4 5]
,我想分配给结构数组。所以用我想要的伪代码编写:s(:).value = vals
.
如下所示,有一个已知的解决方案。但是真的不能像伪代码那样在 1 行中做这个赋值吗?
% Vector of values
vals = [1 2 3 4 5];
n = length(vals);
% Initialize struct
s(n).values = 0;
% Put vals into my struct.values
[s(1:n).values] = ???
% Known solution that i am not satisfied with:
vals_c = num2cell(vals);
[s(1:n).values] = vals_c:;
最好的问候,乔纳斯
【问题讨论】:
为什么对你提到的方法不满意?对我来说看起来很整洁。 因为对于我放入结构中的每个值向量(例如 vals),我需要有一行“vals_c = num2cell(vals);” 您拥有的解决方案可能是最好的。我的方法需要结构合并,这可能最终会比这个解决方案更混乱 【参考方案1】:使用cell2struct 和num2cell 可以在一行中完成此操作。
% Vector of values
vals = [1 2 3 4 5];
n = length(vals);
% Put vals into my struct.values
s = cell2struct(num2cell(vals), 'values', 1)
% transpose if orientation is important
s = s.';
它并不漂亮,但它确实可以在一行中完成。 cell2struct
支持多个条目,因此您可以填充许多字段。
最大的缺点是它从头开始创建结构,因此如果您需要将此数据添加到现有结构中,则必须进行结构合并。
【讨论】:
此方法仅适用于结构的第一个字段。如果s.field1
存在并且values
应该被添加到s
怎么办?
正如我所说,这是这种方法的缺点。您必须创建第二个结构并将它们合并,或者将它们都添加到对 cell2struct
的同一调用中。
对不起,我完全没有看到你答案的最后一行。
有趣的解决方案,但正如您提到的,这是否依赖于初始化结构(Abhinav Ralhan 的解决方案也是如此)。我想我更喜欢“struct('values',num2cell(vals));”解决方案【参考方案2】:
最近经历了同样的阶段,我想我会回答这个问题。
要创建一个包含一个字段的新结构:
field = 'f';
value = 'some text';
[10, 20, 30];
magic(5);
s = struct(field,value)
创建一个包含多个字段的非标量结构:
field1 = 'f1'; value1 = zeros(1,10);
field2 = 'f2'; value2 = 'a', 'b';
field3 = 'f3'; value3 = pi, pi.^2;
field4 = 'f4'; value4 = 'fourth';
s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
另外,正如我一直建议的那样,多看几遍文档是非常必要和有用的,所以你去吧。 https://in.mathworks.com/help/matlab/ref/struct.html
【讨论】:
谢谢。总而言之,我可以使用 field1 = 'values'; 来解决我的问题。 vals = [1:5];结构(field1,num2cell(vals));以上是关于MATLAB 结构体数组赋值的主要内容,如果未能解决你的问题,请参考以下文章