Matlab объединяет две структуры в один массив

#matlab

#matlab

Вопрос:

У меня есть идентичные структуры. Как я могу эффективно объединить два значения структуры в массив?

 foo1.b = 1
foo2.b = 2
  

Как я могу объединить эти две переменные в … foo1 и foo2 в …

 foo.b = [1 2]
  

Комментарии:

1. Я думаю, что единственный способ сделать это — перебрать все поля и все элементы массива struct .

Ответ №1:

Вы можете просто сделать:

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

foo = 

  struct with fields:

    b: [1 2]
  

Комментарии:

1. Да, но я хотел бы иметь функцию. Поскольку .b не является единственным полем структуры. Например. fun(foo1, foo2, foo3, …) и т.д… Далее у меня может быть массив … foo (i).b, в этом смысле

2. @WG- Вся эта информация (функция, несколько полей, массивы) должна была быть изначально включена в вопрос

Ответ №2:

Вот довольно элементарная попытка функции, которая объединяет структуры. Единственным условием является то, что все структуры должны иметь равное количество полей / элементов. Это было что-то вроде объединения / склеивания кода вместе, но…

Входная сигнатура 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