使用变量名称作为结构字段,是否有快速方式(即一行)转储“结构”中的变量集合? “加载”功能基本上可以做到这一点,但保存和加载到临时文件似乎很难看。
例如:
clear
a = 'adsf'
b = rand(10);
x = var2struct(a,b)
x.a
x.b
或更好:
x = var2struct(['a';'b'])
另外,反过来(即将字段值作为字段命名的变量转储到当前作用域)?:
clear
x.a='asdf'
x.b=rand(10);
dumpstruct(x)
a
b
此外,这是一个相关的newsgroup thread。
答案 0 :(得分:18)
除了使用LOAD和SAVE之外,我还没有内置函数来执行此操作。但是,您可以创建自己的函数,如下所示:
function s = var2struct(varargin)
names = arrayfun(@inputname,1:nargin,'UniformOutput',false);
s = cell2struct(varargin,names,2);
end
function struct2var(s)
cellfun(@(n,v) assignin('base',n,v),fieldnames(s),struct2cell(s));
end
在基础工作区中工作,您可以使用以下功能:
a = 'adsf'
b = rand(10);
x = var2struct(a,b);
clear a b
struct2var(x);
有几个笔记:
如果您希望将var2struct
的参数指定为变量名而不是变量本身,则可以使用以下替代函数:
function s = var2struct(varargin)
values = cellfun(@(n) evalin('base',n),varargin,'UniformOutput',false);
s = cell2struct(values,varargin,2);
end
您可以在基本工作区中使用它,如下所示:
x = var2struct('a','b');
不幸的是,您只能使用此版本的函数从基础工作区获取变量,而不是函数的工作区。
上面提到的struct2var
函数的一个警告是它总是在基础工作区中创建变量,而不是调用struct2var
的函数的工作空间。要在基础以外的工作空间中创建变量,您必须在该工作空间中使用此行而不是调用struct2var
:
cellfun(@(n,v) assignin('caller',n,v),fieldnames(x),struct2cell(x));