2016-09-19 11 views
0

以下は、配列 'field_names'で定義されたフィールド名を持つ構造体を作成するために使用しているコードスニペットです。これは構造を作成する非常に厄介な方法のようです。配列のフィールド名を持つ構造体を作成する

私はこれを1行で行うことができますか?おそらく、私は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_namescell配列であるべきであり、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()); 
関連する問題