2011-03-13 85 views
3

我有一個字段名稱列表,想要生成一個嵌套結構。我想這一點:‘參數動態結構的參考值必須爲有效的字段名’在Matlab中生成動態結構

fn1 = {'a', 'b', 'c'}; 
fn2 = {'d', 'e', 'f'}; 
s = struct(); 
for n1=fn1 
    for n2=fn2 
    s.(n1).(n2) = 0 ; 
    end 
end 

但Matlab的抱怨符號「 {字段名)」是動態結構僅供參考()。

我知道一個解決方案的作用是循環使用isfield()和struct()的字段名稱。 那麼我怎樣才能實現這個目標,而不使用isfield()和struct(),例如通過一些匿名函數和矢量化?謝謝

回答

5

您的主要問題是n1n2是單元陣列,它們不是有效的結構名稱。因此,寫作

s.(n1{1}).(n2{1}) = 0; 

修復了錯誤。

然而,更好的方法可能是使用CELL2STRUCT創建s

s2 = cell2struct(cell(size(fn2(:))),fn2(:)); 
s = cell2struct(repmat({s2},size(fn1(:))),fn1(:))