Matlab

2013-03-06 6 views
8

में किसी अन्य संरचना के माध्यम से अद्यतन संरचना मैटलैब में किसी अन्य संरचना के मानों के साथ को एक संरचना अद्यतन करने के लिए कोई सुविधाजनक तरीका है या नहीं। यहाँ कोड, fieldnames, numel के उपयोग और एक for पाश के साथ,Matlab

fn = fieldnames(new_values); 
for fi=1:numel(fn) 
    old_struct.(fn{fi}) = new_values.(fn{fi}); 
end 

बेशक, मैं नहीं चाहता कि old_struct में फ़ील्ड new_values में नहीं हैं ढीला करना चाहते है, तो मैं नहीं कर सकता सरल old_struct=new_values का उपयोग करें।

एक संरचना को अद्यतन करना कुछ ऐसा है जो हम एक दुभाषिया में एक छोटी सी रेखा में करना चाहते हैं।

+4

http://blogs.mathworks.com/loren/2009/10/15/concatenating-structs/ – Dan

+0

थेसिस उत्तर या तो प्रासंगिक नहीं हैं (कोई टकराव नहीं मानते हैं) या उसी 'लूप +' फ़ील्डनाम 'विधि का उपयोग करें । यह इस तथ्य की पुष्टि करता है कि कोई आसान तरीका नहीं है, लेकिन साफ ​​सबूत नहीं देता है;) – M1L0U

उत्तर

5

जब से तुम आश्वस्त नहीं सरल तरीके से प्राप्त करने के लिए आप क्या चाहते है कि देखते हैं, यहाँ विधि Loren Shure's article में वर्णित (लिंक दान की इस टिप्पणी में तैनात देखें), अपने उदाहरण के लिए लागू:

%// Remove overlapping fields from first struct 
s_merged = rmfield(s_old, intersect(fieldnames(s_old), fieldnames(s_new))); 

%// Obtain all unique names of remaining fields 
names = [fieldnames(s_merged); fieldnames(s_new)]; 

%// Merge both structs 
s_merged = cell2struct([struct2cell(s_merged); struct2cell(s_new)], names, 1); 

ध्यान दें कि यह थोड़ा बेहतर संस्करण structs के सरणी को संभालने के साथ-साथ ओवरलैपिंग फ़ील्ड नामों के साथ structs को भी संभाल सकता है (यही वह है जो मुझे विश्वास है कि आप टक्कर पर कॉल करते हैं)।

+0

क्या यह अभी भी काम करेगा यदि फ़ील्ड में से कोई एक संरचना भी है? – Leo

+1

@ लियो मुझे विश्वास है, लेकिन इस मामले में सबसे अच्छा तरीका यह कोशिश करना और देखना है! :-) –