Create a nested structure using a variable as field name
    조회 수: 8 (최근 30일)
  
       이전 댓글 표시
    
Hi everybody
Lets say that I have a variable
   path='\levelOne\levelTwo\levelThree'
of which I don't know the number of levels and that I would like to use this path as "address" of a variable inside a structure, such that
   S.levelOne.levelTwo.levelThree=1;
Now, I know that I can use string variables to set or get structure fileds using a notation like
   fieldName='myField';
   S.(fieldName)=1;
But this works with one level or, with a bit of string manipulation, if I know the number of levels I must call. I'm thinking at something like:
   path='\levelOne\levelTwo\levelThree'
   fields=strsplit(path,'\');
   [fieldOne,fieldTwo,fieldThree]=deal(fields{2:end});
   S.(fieldOne).(fieldTwo).(fieldThree)=1;
Can you think of any kind of trick so that I can write a function that adapt itself to the number of levels I pass it through the path variable?
댓글 수: 0
채택된 답변
  Jan
      
      
 2016년 11월 3일
        
      편집: Jan
      
      
 2016년 11월 3일
  
      This is a job for the getfield and setfield commands:
PathStr = '\levelOne\levelTwo\levelThree';  % Do not shadow the PATH command
Fields  = strsplit(PathStr,'\');   % Ignore initial blank field later
S = [];
S = setfield(S, Fields{2:end}, 1)
V = getfield(S, Fields{2:end})
Internally this calls subsassgn, which can be done directly also. I'd move this into a function, which ignores at least a leading separator automatically:
function S = SetPathField(S, PathStr, Value)
if length(PathStr) >= 1 && PathStr(1) == '\'
  Fields = regexp(PathStr(2:end), '\', 'split');
else
  Fields = regexp(PathStr, '\', 'split');
end
Types    = cell(1, numel(Fields));
Types(:) = {'.'};
S        = subsasgn(S, struct('type', Types, 'subs', Fields), Value);
end
추가 답변 (0개)
참고 항목
카테고리
				Help Center 및 File Exchange에서 Structures에 대해 자세히 알아보기
			
	제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!