MATLAB: Save each pair in container.Map to separate variable in .mat file

assigninMATLABsave variables

Hi I Have a container.Map object in which I need each key, value pair to be saved to a variable within a mat file.
Was originaly doing this with eval but then discovered assignin. Is there a better way to do this?
I need the outputted mat file to contain individual variables and so can't just use list due to the application this .mat file will be used in.
Simplified code snippet below
M = container.Map();
M("var1") = [1 2 3];
M("var2") = [4 5 6];
saveVars = {};
for key = M.keys()
assignin('base', key, M(key))
saveVars(end+1) = key
end
save("output.mat", saveVars{:})

Best Answer

"Is there a better way to do this?"
Of course, just use the -struct option when calling save. Note that conversion to structure relies on the keys being valid fieldnames, which we already know they must be because you are anyway using them as variable names.
M = containers.Map();
M("var1") = [1,2,3];
M("var2") = [4,5,6];
% convert to struct:
C = [keys(M);values(M)];
S = struct(C{:});
save('myfile.mat','-struct','S')
Related Question