2016-09-19 107 views
0

下面我有一段代碼,我正在使用該代碼創建一個結構,其中的字段名稱在數組'field_names'中定義。這似乎是創建結構的一種非常笨重的方式。使用數組中的字段名稱創建結構

有沒有更好的方法,我可以做到這一點?也許有一些語法技巧來幫助我避免for循環?

%array of names to create field names from 
field_names = ['num1', 'num2', 'num3', 'etc']; 
data = struct() 
for i = 1:length(field_names) 
    data.field_names(i) = rand() %some random value, doesn't matter for now 
end 

回答

2

所以首先,你寫的,因爲field_names它不會工作方式應該是cell陣列,並struct充滿活力的領域,需要引用括號:

data.(field_names{i}) = rand(); 

您可以使用cell2struct使用這些字段名稱和期望的值構建struct

field_names = {'num1', 'num2', 'num3'}; 
values = num2cell(rand(size(field_names))); 

S = cell2struct(values(:), field_names(:)) 

% num1: 0.2277 
% num2: 0.4357 
% num3: 0.3111 

直接調用時struct您也可以創建所有的現場和值:

S = struct('num1', rand(), 'num2', rand(), 'num3', rand());