我的基础工作区中有很多变量。我有一个包含有效名称的字符串列表。假设基础工作区包含变量名称 var1
、var2
、var3
、var4
、var5
、var6
、var7
、var8
、var9
、var10
和字符串列表是一个元胞数组,等于:
listParam = {'var4' 'var7' 'var10'};
现在,我想检查 listParam
中的字符串在基础工作区中是否有相应的声明变量。这是我到目前为止所做的:
function [compareCellArrayList] = test(listParam)
S = evalin('base','whos'); % Looks for the variables in the base workspace
listWorkspaceVariable = cell(size(S)); % Pre-allocate
for ii = 1:length(S)
listWorkspaceVariable{ii,1} = S(ii,1).name; % Gets the variable name of each variable
end
compareCellArrayList = cellfun(@(x) ismember(x, listParam), listWorkspaceVariable, 'UniformOutput', false);
上面的代码工作正常,但只是我觉得它可以简化,同时仍然易于理解。有什么想法吗?
最佳答案
您可以将第 3 行到第 6 行替换为
listWorkspaceVariable = {S.name};
您也可以使用ismember
有两个元胞数组,因此最后一行可以重写
compareCellArrayList = ismember(listWorkspaceVariable, listParam);
所以会像
function [listWorkspaceVariable] = test(listParam)
S = evalin('base','whos'); % Looks for the variables in the base workspace
listWorkspaceVariable = {S.name};
compareCellArrayList = ismember(listWorkspaceVariable, listParam);
顺便说一下,你的函数似乎没有返回 compareCellArrayList
。
关于string - 如何将工作区变量名称与字符串列表(元胞数组)进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18515354/