मुझे नहीं लगता कि आप विवादों को अच्छी तरह से एक लूप को संभाल सकते हैं, और न ही मुझे लगता है कि आपको एक से बचने की आवश्यकता होगी। (हालांकि मुझे लगता है कि दक्षता एक मुद्दा हो सकता है w/कई फ़ील्ड ...)
मैं कुछ फ़ंक्शन का उपयोग करता हूं जिसे मैंने कुछ साल पहले setdefaults.m
कहा था, जो एक संरचना को किसी अन्य संरचना के मानों के साथ जोड़ती है, जहां कोई प्राथमिकता लेता है संघर्ष के मामले में दूसरे पर।
% SETDEFAULTS sets the default structure values
% SOUT = SETDEFAULTS(S, SDEF) reproduces in S
% all the structure fields, and their values, that exist in
% SDEF that do not exist in S.
% SOUT = SETDEFAULTS(S, SDEF, OVERRIDE) does
% the same function as above, but if OVERRIDE is 1,
% it copies all fields of SDEF to SOUT.
function sout = setdefaults(s,sdef,override)
if (not(exist('override','var')))
override = 0;
end
sout = s;
for f = fieldnames(sdef)'
cf = char(f);
if (override | not(isfield(sout,cf)))
sout = setfield(sout,cf,getfield(sdef,cf));
end
end
अब मैं इसके बारे में लगता है कि, मैं बहुत यकीन है कि "ओवरराइड" इनपुट अनावश्यक है (आप बस आदानों की क्रम बदल सकते हैं) हालांकि मैं 100% है कि यकीन नहीं कर रहा हूँ .. ।
% SETDEFAULTS2 sets the default structure values
% SOUT = SETDEFAULTS(S, SDEF) reproduces in S
% all the structure fields, and their values, that exist in
% SDEF that do not exist in S.
function sout = setdefaults2(s,sdef)
sout = sdef;
for f = fieldnames(s)'
sout = setfield(sout,f{1},getfield(s,f{1}));
end
और कुछ नमूनों में यह परीक्षण करने के लिए:
>> S1 = struct('a',1,'b',2,'c',3);
>> S2 = struct('b',4,'c',5,'d',6);
>> setdefaults2(S1,S2)
ans =
b: 2
c: 3
d: 6
a: 1
>> setdefaults2(S2,S1)
ans =
a: 1
b: 4
c: 5
d: 6
पहला समाधान 'सेल 2 स्ट्रक्चर' द्वारा एक लाइनर में परिवर्तित किया जा सकता है। हालांकि मैं इसके प्रदर्शन के बारे में नहीं जानता। –