如何在Matlab中实现不同结构间的下标赋值?

如何在Matlab中实现不同结构间的下标赋值?,matlab,struct,Matlab,Struct,我想将一个结构A分配给另一个结构B索引: B(3) = A; 而A与B具有不同的字段。我希望自动创建不存在的字段,自动忽略不存在的字段 这在Matlab中可能吗?解决方案 您可以使用函数,并使用循环指定每个字段值。其他字段将保持不变 示例 %defines input stract a.f1 = 2; a.f2 = 3; a.f3 = 'str'; temp.f2=5; temp.f3 = 7; temp.f4 =1; b(1) = temp; b(2) = temp; b(3) = temp

我想将一个结构
A
分配给另一个结构
B
索引:

B(3) = A;
A
B
具有不同的字段。我希望自动创建不存在的字段,自动忽略不存在的字段


这在
Matlab
中可能吗?

解决方案

您可以使用函数,并使用循环指定每个字段值。其他字段将保持不变

示例

%defines input stract
a.f1 = 2; a.f2 = 3; a.f3 = 'str';
temp.f2=5; temp.f3 = 7; temp.f4 =1;
b(1) = temp; b(2) = temp; b(3) = temp;

%iterates over the fields of a and assigns their values into b
fields = fieldnames(a);
for ii = 1:numel(fields)
  b(3).(fields{ii}) = a.(fields{ii});
end
结果

以前

a = 
f1: 2
f2: 3
f3: 'str'

b(3) = 
f2: 5
f3: 7
f4: 1
之后


编辑:伊贝齐托以一分钟左右的优势击败我,得到了几乎相同的答案

我对这样的函数做了类似的操作:

function B = mergeStruct(B,A,bIdx)
aFields = fieldnames(A);
for af = aFields';
    B(bIdx).(char(af)) = A.(char(af));
end
请参见此示例:

>> B.a = 1;
>> B.b = 2;
>> A.b = 10;
>> A.c = 11;
>> B = mergeStruct(B,A,3)
>> B(1)
ans = 
    a: 1
    b: 2
    c: []

>> B(2)
ans = 
    a: []
    b: []
    c: []

>> B(3)
ans = 
    a: []
    b: 10
    c: 11

我认为这对建筑来说是不可能的。也许您可以提供一个简单的示例来定义一个类并重写它?
>> B.a = 1;
>> B.b = 2;
>> A.b = 10;
>> A.c = 11;
>> B = mergeStruct(B,A,3)
>> B(1)
ans = 
    a: 1
    b: 2
    c: []

>> B(2)
ans = 
    a: []
    b: []
    c: []

>> B(3)
ans = 
    a: []
    b: 10
    c: 11