2016-09-19 2 views
0

아래 '필드 이름'배열에 정의 된 필드 이름을 사용하여 구조체를 만드는 데 사용하는 코드 스 니펫이 있습니다. 이것은 구조를 만드는 매우 어설픈 방식처럼 보입니다.배열에서 필드 이름이있는 구조 만들기

내가 한 줄로 할 수있는 더 좋은 방법이 있습니까? 아마도 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());