我有:
A =
a: 1
b: 2
c: 3
d: 4
B =
e: 10
d: 10
b: 10
a: 10
我想将这两个连接起来如下。
new_struct =
a: 11
b: 12
c: 3
d: 14
e: 10
'new'中字段的顺序无关紧要。
我一直在努力学习高效的matlab编程。如果不使用for循环和if语句,我该怎么做?
答案 0 :(得分:1)
我认为现在已经解决了这个问题,但是对于其他来自谷歌的人来说,这里有一个函数可以添加两个结构(虽然不是所描述的方式)。它 用于循环和if语句,但希望它对某些人有用。
function S = addStructs(S1, S2)
% S = addStructs(S1, S2)
%
% Given two structs S1 and S2, returns a struct S such that
% S.<fieldName> = S1.<fieldName> + S2.<fieldName> for all
% fieldNames whose corresponding values are both numeric
% and the same length in both S1 and S2.
%
% If the values are not numeric or not the same length, the
% value from S1 is copied to S.
%
% This function will throw an error if the field names in
% S1 and S2 are not the same.
%
% Example:
%
% >> s1
%
% s1 =
%
% a: 1
% b: 2
% c: [1 2 3]
% foo: 'bar'
%
% >> s2
%
% s2 =
%
% a: 1
% b: 4
% c: 3
% foo: 'baz'
%
% >> addStructs(s1, s2)
%
% ans =
%
% a: 2
% b: 6
% c: [1 2 3]
% foo: 'bar'
fNames1 = fieldnames(S1);
fNames2 = fieldnames(S2);
diff = setdiff(fNames1, fNames2);
if ~isempty(diff)
error('addStructs: structures do not contain same field names')
end
numFields = length(fNames1);
for i=1:numFields
% get values for each struct for this field
fNameCell = fNames1(i);
fName = fNameCell{:};
val1 = S1.(fName);
val2 = S2.(fName);
% if field non-numeric, use value from first struct
if (~isnumeric(val1) || ~isnumeric(val2) )
S.(fName) = val1;
% if fields numeric but not the same length, use value
% from first struct
elseif (length(val1) ~= length(val2) )
S.(fName) = val1;
% if fields numeric and same length, add them together
else
S.(fName) = val1 + val2;
end
end
end
答案 1 :(得分:0)