如何在matlab中检查工作空间中是否存在具有字段的结构

时间:2012-08-20 16:16:42

标签: string matlab structure

我有一个字符串,想要检查工作区中是否存在任何具有相同名称的变量。在工作区中,我还有许多结构M.N.O M.N.N M.N.M等我只能检查是否存在名为M的变量。如何更深入地进入这个结构? 我试过了:

exist('M.N')
YesNo = any(strcmp(who,'M.N.O'))
evalin('base','exist(''M.N.O'',''var'')')

所有人都给我同样的问题所以我被困住了。

2 个答案:

答案 0 :(得分:11)

您可以使用isfield检查变量是否具有特定字段。请参阅链接以获取示例!

对于您的示例,您需要:

isfield(M,'N')

如果是的话,你可以更进一步:

isfield(M.N,'O')

请注意

isfield(M,'N.O')

不起作用;)

答案 1 :(得分:3)

一个选项:编写一个递归函数,将结构扩展到叶子字段,将字段附加到列表中。

(未经测试的概念性代码 - 可能无法正常工作)

function varlist = getStructFields(var,varlist)
if isstruct(var)
    fn = fieldnames(var);
    varlist = vertcat(varlist,fn); %# append fields to the list
    for field = fn' %# ' create row vector; iterate through fields
         varlist = getStructFields(var.(char(field)), varlist); %# recursion here 
    end
end
end

然后,您可以使用已经提出的any(strcmp(who,'M.N.O'))检查。