Matlab将两个结构合并为一个数组

时间:2020-10-07 17:11:48

标签: matlab

我必须使用相同的结构。如何将结构的两个值有效地组合到一个数组中?

foo1.b = 1
foo2.b = 2

如何将这两个变量合并到... foo1foo2合并到...

foo.b = [1 2]

2 个答案:

答案 0 :(得分:1)

您可以这样做:

>> foo.b = [foo1.b foo2.b]

foo = 

  struct with fields:

    b: [1 2]

答案 1 :(得分:0)

这里是结合结构的函数的基本尝试。唯一的条件是结构必须全部具有相同数量的字段/成员。在一起虽然有点拼凑/粘合,但是...

输入签名varargin(可变输入参数)允许函数中可变数量的输入。 nargin变量指示输入参数的数量。通过反复试验,可以创建正确的类型。函数fieldnames()允许在输入的结构中检索字段名称。

%Structure 1%
foo1.b = 1;
foo1.a = 2;
foo1.c = 5;

%Structure 2%
foo2.b = 3;
foo2.a = 1;
foo2.c = 4;

%Structure 3%
foo3.b = 5;
foo3.a = 2;
foo3.c = 7;

%Function call%
[foo] = Combine_Structures(foo1,foo2,foo3);
foo.a
foo.b
foo.c


%Function%
function [foo] =  Combine_Structures(varargin)

Number_Of_Fields = numel(fieldnames(varargin{1}));
Field_Names = fieldnames(varargin{1});


Number_Of_Inputs = nargin;
Variable_Input_Arguments = varargin;
Argument_Array = (1:Number_Of_Inputs);
    
Structures = Variable_Input_Arguments;


for Field_Index = 1: Number_Of_Fields
Field = string(Field_Names(Field_Index));

Combined_Array = [Structures{1:Number_Of_Inputs}];
Combined_Array = [Combined_Array(1:Number_Of_Inputs).(Field)];


foo.(Field) = Combined_Array;

end

end

使用MATLAB版本:R2019b