2013-05-23 2 views
4

(도움말) Matlab에서 중첩 된 필드에 동적으로 액세스 할 수 있습니까? 나는 이와 같은 테스트 케이스에 대해 생각했다 :Matlab에서 중첩 된 필드에 동적으로 액세스

a = struct; 
a.foo.bar = []; 

place = {'foo', 'bar'}; 

a.(place{:}) 

% instead of the following, which only works if know in advance 
% how many elements 'place' has 
a.(place{1}).(place{2}) 
+1

[동적 필드 참조 _ _] (http://blogs.mathworks.com/loren/2005/12/13/use-dynamic-field-references/)를 의미합니까? –

+0

예, 하나 이상의 레이어가 있습니다. – quazgar

답변

5

하나의 솔루션이 나는 그것이 .() 동적 필드 이름 구문의 우아함이 부족 주로 때문에, 매우 만족하지 오전된다

getfield(a, place{:}) 
+0

+1 : 중첩 수준을 알지 못하면 유일한 선택 인 것 같습니다. –

+0

'getfield' 소스를 검사하면 기본적으로 for 루프가'a = a. (place {i}) '처럼 반복됩니다. 나는 다른 방법을 보지 못한다 – Amro

3

당신이를 구축해야하는 경우 getfield()이 방법이 더 읽기 쉽고 빠르게, 어떤 의심의 여지없이

a.foo.bar = 'hi'; 
place  = {'foo', 'bar'}; 

% Build subs for referencing a structure and apply subsref 
typesub = [repmat({'.'},1,numel(place)); place]; 

subsref(a,substruct(typesub{:})) 
ans = 
hi 

: 그냥 변화를 위해, 당신은 subsref()을 사용할 수 있습니다(그렇지 않으면 속도 비교가 이러한 기본 작업에 대해 식별 할 수 없습니다).

+1

[subsref()] (http://www.mathworks.co.uk/help/matlab/ref/subsref.html)와 [substruct()] (http : /www.mathworks.de/de/help/matlab/ref/substruct.html). 이것은 [Matlab 동적 필드 네임 구조 (셀 배열 포함)] (http://stackoverflow.com/questions/7596575)와 같이보다 복잡한 중첩 액세스에 특히 유용 할 수 있습니다. – quazgar

관련 문제