2010-09-20 15 views
5

Bir yapıya derinliklerde rastgele bir sayıyı gömülebilen bir alana erişim problemi ile ilgileniyorum. İki seviyeyi kullanan somut bir örnek aşağıdadır.MATLAB'ta bir alanın bir alanına dinamik olarak nasıl erişebilirim?

midlevel.bottomlevel = 'foo'; 
toplevel.midlevel = midlevel; 

Ben bir dize olarak alan adını geçirerek midlevel yapısını erişebilir, örneğin:

ben aşağıdaki MATLAB komut satırından tanımlayan bir yapıya toplevel var ki

: -
fieldnameToAccess = 'midlevel'; 
value = toplevel.(fieldnameToAccess); 

ama bottomlevel yapısını aynı şekilde erişemez aşağıdaki geçerli sözdizimi değil

fieldnameToAccess ile ilgili dönemler için bir işlev yazabilir ve sonra da istenen alanı elde etmek için yinelemeli olarak yinelemeyi seçebilirim, ancak MATLAB yerleşiklerini yalnızca alan değerini doğrudan almak için kullanmanın akıllıca bir yolu olup olmadığını merak ediyorum.

cevap

9

Aşağıdaki gibi senin örneğin iki adımda, içine erişen dinamik alanını bölmek zorunda kalacak: Ancak

>> field1 = 'midlevel'; 
>> field2 = 'bottomlevel'; 
>> value = toplevel.(field1).(field2) 

value = 

foo 

, sen alt alanlardan keyfi bir sayı ile bir dize için bu çözümü genelleme yapabiliriz bir yol var dönemlere göre ayrılmış. Bir değişkenin, yani sonuna fieldnameToAccess eklemek için bir yolu var mı

>> fieldnameToAccess = 'midlevel.bottomlevel'; 
>> fields = textscan(fieldnameToAccess,'%s','Delimiter','.'); 
>> value = getfield(toplevel,fields{1}{:}) 

value = 

foo 
+0

: Sen tek adımda erişmek özyinelemeli alanını gerçekleştirmek için dize ve fonksiyon GETFIELD alan adları ayıklamak için işlevini TEXTSCAN kullanabilirsiniz . toplevel (alanlar {1}, {1}) (alanlar {1} {2}) = yeniden örnekleme (getfield (üst düzey olarak, alanlar {1} {:}), ...)..; genel olarak (sadece 2 seviye olduğunu bilmeden)? – Jon

İlgili konular