#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