如何在Matlab中执行不同结构之间的下标分配?

时间:2018-01-17 12:29:25

标签: matlab struct

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

B(3) = A;

A字段与B不同。我希望自动创建不存在的字段,并且自动忽略不存在的字段。

这可能在Matlab吗?

2 个答案:

答案 0 :(得分:1)

<强>解决方案

您可以使用fieldnames函数,并使用循环分配每个字段值。其他领域将保持不变。

示例

%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

b(3)= 
f2: 3
f3: 'str'
f4: 1
f1: 2

答案 1 :(得分:0)

编辑:Ibezito在一分钟左右的时间内将我击败了几乎相同的答案......

我已经用类似这样的功能做了类似的事情:

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