Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [[1,2,[3]],4] -> [1,2,3,4]
- a.c = [5,4];
- a.b.a=[9];
- a.b.d=[1,2];
- a= b: [1x1 struct]
- c: [5 4]
- output= [9,1,2,5,4]
- function C = flatten_struct(A)
- A = struct2cell(A);
- C = [];
- for i=1:numel(A)
- if(isstruct(A{i}))
- C = [C,flatten_struct(A{i})];
- else
- C = [C,A{i}];
- end
- end
- end
- a.c = [5,4];
- a.b.a=[9];
- a.b.d=[1,2];
- flatten_struct(a)
- ans =
- 5 4 9 1 2
- % struct2sims converter
- function simout = struct2sims(structin)
- fnam = fieldnames(structin);
- for jf = 1:numel(fnam)
- subnam = [inputname(1),'_',fnam{jf}];
- if isstruct(structin.(fnam{jf}) ) ,
- % need to dive; build a new variable that's not a substruct
- eval(sprintf('%s = structin.(fnam{jf});', fnam{jf}));
- eval(sprintf('simtmp = struct2sims(%s);',fnam{jf}) );
- % try removing the struct before getting any farther...
- simout.(subnam) = simtmp;
- else
- % at bottom, ok
- simout.(subnam) = structin.(fnam{jf});
- end
- end
- % need to unpack structs here, after each level of recursion
- % returns...
- subfnam = fieldnames(simout);
- for kf = 1:numel(subfnam)
- if isstruct(simout.(subfnam{kf}) ),
- subsubnam = fieldnames(simout.(subfnam{kf}));
- for fk = 1:numel(subsubnam)
- simout.([inputname(1),'_',subsubnam{fk}])...
- = simout.(subfnam{kf}).(subsubnam{fk}) ;
- end
- simout = rmfield(simout,subfnam{kf});
- end
- end
- % if desired write to file with:
- % save('flattened','-struct','simout');
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement