Matlab

2013-03-06 7 views
8

içinde başka bir yapı üzerinden yapılandırma yapısını Yapılandırma Yapı bir yapılandırmanın Matlab'daki başka bir yapının değerleri ile uygun bir yolu olup olmadığını merak ediyorum. İşte fieldnames, numel kullanımı ve for döngü ile kod,Matlab

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

Tabii ki, ben new_values olmayan old_struct alanları kaybetmek istemiyoruz, bu yüzden yapamam Basit old_struct=new_values kullanın.

Bir yapının güncellenmesi, bir tercümanda kısa bir satırda yapmak isteyebileceğimiz bir şeydir. İstediğinizi elde etmek için hiçbir basit bir yolu var olduğuna ikna yana

+4

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

+0

Tezler ya uygun değildir (çarpışma varsayar) veya aynı "for' loop +" fieldnames' yöntemini kullanır. . Bu, daha basit bir yol olmadığı gerçeğini doğrulamaya meyillidir, ancak temiz bir kanıt vermez;) – M1L0U

cevap

5

, burada (Dan'in yorumda yayınlanmıştır bağlantıya bakınız) Loren Shure's article açıklanan yöntem, sizin örnek uygulanan:

%// 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); 

Not o Bu biraz geliştirilmiş sürümü, yapıların dizilerinin yanı sıra, örtüşen alan adlarına sahip yapıları da işleyebilir (bu, çarpışma diye adlandırdığınızı düşünüyorum).

+0

Bu alanlardan biri de bir yapı ise hala işe yarar mı? – Leo

+1

@Leo Buna inanıyorum, ama bu durumda en iyi yaklaşım denemek ve görmek! :-) –