是否有一种快速方法(即一行)来转储结构“中”的变量集合,使用变量名称作为结构字段? “加载”函数基本上就是这样做的,但是保存和加载到临时文件看起来很丑陋。
例如:
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
另外,这里有一个相关的新闻组话题 http://www.mathworks.cn/matlabcentral/newsreader/view_thread/289189.
除了使用LOAD http://www.mathworks.com/access/helpdesk/help/techdoc/ref/load.html and SAVE http://www.mathworks.com/access/helpdesk/help/techdoc/ref/save.html,据我所知,没有内置函数可以执行此操作。但是,您可以创建自己的函数,如下所示:
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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)