我必须使用相同的结构。如何将结构的两个值有效地组合到一个数组中?
foo1.b = 1
foo2.b = 2
如何将这两个变量合并到... foo1
和foo2
合并到...
foo.b = [1 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