我需要使用以下结构解析函数参数gVars
:
{ {'var1', 1}, { {'var2', 2}, {'var3', 3} } }
基本上它总是有两个元素。每个元素可以是像{'var', value}
这样的单元格数组,也可以是包含嵌套单元格数组的数组,如上例中的{{-} [, {-}]+}
。我不想强迫用户将第一种类型的值({'var', val}
)括在双括号中,如{{'var', val}}
(如果只有一个变量,那么用户可以自由使用1-级别单元格数组。)
我实现了这段代码:
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}}
,那就没问题了。
基本上,问题是:如何区分上面的两个单元阵列?有没有人可以帮助我?
答案 0 :(得分:3)
您可以在第一项上使用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