我需要解析一个函数参数 gVars
具有以下结构:
{ {'var1', 1}, { {'var2', 2}, {'var3', 3} } }
基本上它总是有两个元素。每个元素都可以是元胞数组,如 {'var', value}
或包含嵌套元胞数组的数组,如 {{-} [, {-}]+}
在上面的例子中。我不想强制用户将第一种类型的值 ( {'var', val}
) 括在像这样的双括号中 {{'var', val}}
(如果只有一个变量,那么用户可以自由使用一级元胞数组)。
我实现了这段代码:
for ii=1:length(gVars)
disp 'Current group'
curGroup = gVars{1, ii}
for jj=1:length(curGroup)
disp 'Current group content'
content = curGroup{1, jj}
allColumns = {allColumns{:}, content{1}};
end
end
错误是:
Current group
curGroup =
'var' []
Current group content
content =
var
Cell contents reference from a non-cell array object.
基本上我无法区分这两种长度为 2 的元胞数组:
{'v1', val1}
{ {'v2', val1}, {'v3', val3} }
它们都是长度为 2 的元胞数组。使用 {'v1', val1}
,当我尝试使用 content{1}
访问变量名时它失败了因为它已经选择了字符串 'v1'
.该代码显然适用于第二个参数,如果我将第一种类型的值强制为 {{'v1', val1}}
就可以了。 .
所以基本上,问题是:如何区分上面的两个元胞数组?有没有人可以帮助我?
最佳答案
您可以在第一项上使用 iscell
home
val1 = 1; val2 = 2; val3 = 3;
test{1} = {'v1', val1};
test{2} = { {'v2', val1}, {'v3', val3} };
for ii=1:length(test)
if iscell ( test{ii}{1} )
fprintf ( 'do this for %s\n', test{ii}{1}{1} )
else
fprintf ( 'do this for %s\n', test{ii}{1} )
end
end
关于matlab - 如何区分嵌套元胞数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36596245/