2010-09-20 115 views
5

我感興趣的是訪問一個字段的一般問題,該字段可能會被隱藏在包含結構中的任意數量的深層。下面是一個使用兩個級別的具體示例。如何動態訪問MATLAB中結構的字段字段?

說我有一個結構toplevel,這是我從MATLAB命令行定義與下列:

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

我可以通過將字段名稱作爲字符串訪問midlevel結構,例如:

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

,但我不能訪問bottomlevel結構以同樣的方式 - 以下是無效的語法:

fieldnameToAccess = 'midlevel.bottomlevel'; 
value = toplevel.(fieldnameToAccess); %# throws ??? Reference to non-existent field 'midlevel.bottomlevel' 

我可以編寫一個函數,通過fieldnameToAccess查找期間,然後遞歸迭代以獲得所需的字段,但我想知道是否有一些聰明的方法來使用MATLAB內置函數直接獲取字段值。

回答

9

你將不得不拆分動態現場訪問分爲兩個步驟,你的例子,如:

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

value = 

foo 

但是,你可以概括這個解決方案的串子場任意數量的方式按期限劃分。您可以使用該功能TEXTSCAN提取從字符串和功能GETFIELD字段名稱來執行遞歸領域一步到位訪問:

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

value = 

foo 
+0

有沒有辦法給fieldnameToAccess追加到一個變量,即結束。頂層(字段{1} {1})(字段{1} {2})=重採樣(getfield命令(頂層,字段{1} {:}),...)。。在一般的方式(不知道只有2級)? – Jon 2013-03-11 22:59:29

相關問題